messages Table
+----+----------+
| id | text |
+----+----------+
| 1 | message1 |
| 2 | message2 |
+----+----------+
tags table
+----+-----------+
| id | name |
+----+-----------+
| 1 | valentine |
| 2 | funny |
| 3 | santa |
+----+-----------+
message_tag
+----+------------+--------+
| id | message_id | tag_id |
+----+------------+--------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
+----+------------+--------+
到目前为止,我已经编写了这个查询来获取所有消息,但我无法返回 消息,其中tag_id = 1;
Message::with([ 'tags'=>function($q){ $q->select("name","tag_id"); } ])->select("id", "text")->paginate(10);
我在函数内使用了where子句($ q){$ q-> where(' tag_id',1)}。但它没有奏效。
答案 0 :(得分:2)
$tagId = 1;
$return = DB::table('message_tag')
->join('messages', 'messages.id', '=', 'message_tag.message_id')
->join('tags', 'tags.id', '=', 'message_tag.tag_id')
->where("message_tag.tag_id", "=", $tagId)
->select('messages.text', 'tags.text')
->get();
答案 1 :(得分:2)
尝试使用whereHas()
,假设您正确设置了多对多关系:
$tag = 'Madhab452';
$messages = Message::whereHas('tags', function ($query) use ($tag) {
$query->where('name', '=', $tag)
->select('name', 'tag_id');
})->get();