簡體   English   中英

如何獲得至少具有多個“ hasmany”模型的N個相關性的隨機模型

[英]How to get a random model with at least N related of multiple `hasmany` models

我正在嘗試結合兩個功能:-獲取隨機模型-...但前提是它至少具有1個相關模型

我的網址是entity/random ,下面的代碼運行良好:

    if ($entityid == 'random') {
        $random = Entity::all()->random(1);
        return Redirect::to(trans('routes.entities') . '/' . $random->id);
    }

現在,我的Entity模型定義了兩個關系:

public function comments()
{
    return $this->hasMany('App\Models\Comment', 'entity_id');
}

public function sources()
{
    return $this->hasMany('App\Models\Source', 'entity_id');
}

定義它們后,我可以通過$object->comments->count()獲得相關評論的數量,或者通過$object->sources->count()源的$object->sources->count() 我的數據庫是MySQL。

我的大多數Entities都沒有評論或消息來源。

Laravel Querying Relations Model :: has('relation')啟發,我無法獲得帶有至少2條評論的隨機模型:

$random = Entity::has('comments', '>=', DB::raw(2))->get()->random(1);
// produces an Entity with at least 2 comments

去做

如何挑選只有兩種關系的至少一個算一個隨機模型( sourcescomments )是至少2 也許…… orHas已經存在?

是的,有一個orHas方法。

您可以這樣使用它:

$random = Entity::has('comments', '>=', 2)->orHas('sources', '>=', 2)->get()->random(1);

其他一些注意事項:

has()語句不需要DB::raw()語法。 sqlite數據庫曾經存在一個需要此語法的錯誤,但自Laravel 4.1.25起已得到解決。

此外,您可能想更改獲取隨機實體的方式。 使用當前代碼,您將檢索滿足條件的每條記錄,並為每條記錄創建一個完整的Entity對象。 您擁有的實體記錄越多,此代碼將越慢。 我建議這樣的事情:

$id = Entity::has('comments', '>=', 2)->orHas('sources', '>=', 2)->lists('id')->random(1);

$random = Entity::find($id);

首先,使用lists()方法獲取與條件匹配的所有實體的id。 從Laravel 5.2開始, lists()返回一個集合。 在該ID集合上使用random()方法來選擇一個ID。 然后, find()一個id,因此僅創建一個Entity對象。

暫無
暫無

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

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