簡體   English   中英

如何構建雄辯的查詢以檢索主表的記錄,在Laravel 5 PHP中對其相關表應用where子句?

[英]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.

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