簡體   English   中英

如何查詢提供類型和ID的多態雄辯模型?

[英]How to query a polymorphic Eloquent model providing the type and the id?

我有一個多態模型“ Discussion和其他可discussable模型。

我已經配置了變形貼圖,以將project轉換為App\\Models\\Company\\Project ,這是可以discussable

我想寫:

function get_all_discussions($type, $id) 
{
    return Discussion::orderBy('created_at', 'desc')
        ->where('discussable_type', $type)
        ->where('discussable_id', $id)
        ->get();
}

get_all_discussion('project', 1232);

不幸的是->where('discussable_type', $type)不適用於變形貼圖。

我當前的解決方案是使用此合並:

function getMorphType($typeOrClass)
{
    $morphMap = array_flip(\Illuminate\Database\Eloquent\Relations\Relation::morphMap());

    return array_get($morphMap, $typeOrClass, $typeOrClass);
}

更好的方法可能是在模型中定義關系: https : //laravel.com/docs/5.8/eloquent-relationships#polymorphic-relationships

例如,我得到了Project和Issue這兩個可以討論的模型。

class Project
{
    public function discussions()
    {
        return $this->morphMany(Discussion::class, 'discussable');
    }
}
class Issue
{
    public function discussions()
    {
        return $this->morphMany(Discussion::class, 'discussable');
    }
}

然后,如果您想獲得有關項目或問題的所有討論:

$project = Project::findOrFail(101);
$issue = Issue::findOrFail(102);

$project->discussions;
$issue->discussions;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM