[英]How to apply where clause on field of related table on Laravel eloquent
[英]How to build Eloquent query to retrieve records of the main table, applying where clause on it's related table in Laravel 5 PHP?
使用Laravel文檔中的示例多對多relaltionshiop數據庫結構,如下所示:
posts
id - integer
name - string
videos
id - integer
name - string
tags
id - integer
name - string
taggables
tag_id - integer
taggable_id - integer
taggable_type - string
我想檢索post.name LIKE %laravel%
或tags.name LIKE %laravel%
post
記錄。
如何使用口才模型來建立這樣的查詢? 這對我來說是一個很大的挑戰,因為我只想獲得名稱由laravel
單詞組成的帖子,或者其相關標簽的名稱由相同單詞組成的帖子。
您可以為此使用whereHas
。
從文檔 :
如果您需要更多功能,則可以使用whereHas和orWhereHas方法在您的條件查詢中放置“ where”條件。 這些方法使您可以向關系約束中添加自定義約束,例如檢查注釋內容。
use Illuminate\Database\Eloquent\Builder;
// Retrieve posts with at least one comment containing words like foo%...
$posts = App\Post::whereHas('comments', function (Builder $query) {
$query->where('content', 'like', 'foo%');
})->get();
在您的情況下,將是這樣的:
use Illuminate\Database\Eloquent\Builder;
$input = 'laravel';
Post::whereHas('tags', function (Builder $query) use ($input) {
$query->where('name', 'like', '%' . $input .'%');
})->orWhere('name', 'like', '%' . $input . '%')->get();
這應該工作:
$result = Post::whereHas('tags', function ($query) {
$query->where('name', 'like', '%laravel%')
->orWhere('tags.name', 'like', '%laravel%');
})->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.