Laravel 8 多態(tài)關(guān)聯(lián)查詢

2021-07-19 11:40 更新

要查詢 MorphTo 關(guān)聯(lián)的存在,可以使用 whereHasMorph 方法及其相應(yīng)的方法:

use Illuminate\Database\Eloquent\Builder;

// 查詢與帖子或視頻相關(guān)并且標(biāo)題包含 foo 的評(píng)論...
$comments = App\Models\Comment::whereHasMorph(
    'commentable',
    ['App\Models\Post', 'App\Models\Video'],
    function (Builder $query) {
        $query->where('title', 'like', 'foo%');
    }
)->get();

// 查詢與帖子相關(guān)的評(píng)論,標(biāo)題不包含 foo%...
$comments = App\Models\Comment::whereDoesntHaveMorph(
    'commentable',
    'App\Models\Post',
    function (Builder $query) {
        $query->where('title', 'like', 'foo%');
    }
)->get(); 

你可以使用 $type 參數(shù)根據(jù)相關(guān)模型添加不同的約束:

use Illuminate\Database\Eloquent\Builder;

$comments = App\Models\Comment::whereHasMorph(
    'commentable',
    ['App\Models\Post', 'App\Models\Video'],
    function (Builder $query, $type) {
        $query->where('title', 'like', 'foo%');

        if ($type === 'App\Models\Post') {
            $query->orWhere('content', 'like', 'foo%');
        }
    }
)->get(); 

您可以提供 * 作為通配符,讓 Laravel 從數(shù)據(jù)庫中查詢所有可能的多態(tài)類型,而不是傳遞可能的多態(tài)模型數(shù)組。Laravel 將執(zhí)行其他查詢以執(zhí)行此操作:

use Illuminate\Database\Eloquent\Builder;

$comments = App\Models\Comment::whereHasMorph('commentable', '*', function (Builder $query) {
    $query->where('title', 'like', 'foo%');
})->get(); 
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)