任何人都可以帮我写查询从我的单词表中检索单词,使得单词通过类型数据透视表与类型模型具有belongsToMany关系吗?
以下是Word.php中关系的样子
public $belongsToMany = [
'typeswb' => [
'Yeoman\Wordbank\Models\Type',
'table' => 'yeoman_wordbank_types_pivotb',
'order' => 'typesofwordbank'
]
];
以下是类型表的外观
mysql> select * from yeoman_wordbank_types;
+----+--------------------+--------------------+
| id | typesofwordbank | slugoftypes |
+----+--------------------+--------------------+
| 1 | Common Words | common-words |
| 2 | Common Expressions | common-expressions |
| 3 | Common Proverbs | common-proverbs |
| 4 | Common Idioms | common-idioms |
+----+--------------------+--------------------+
4 rows in set (0.00 sec)
以及类型数据透视表的外观如何
mysql> select * from yeoman_wordbank_types_pivotb;
+---------+---------+
| word_id | type_id |
+---------+---------+
| 18 | 2 |
| 5 | 4 |
| 9 | 3 |
| 19 | 1 |
| 31 | 1 |
+---------+---------+
5 rows in set (0.00 sec)
正如您所看到的,type_id
已连接到words_id
。其中types_id's
来自类型表,words_id's
来自字表。
我需要找到一种方法来使用types_id
来获取单词。
我试过以下
// $query = Word::all();
// foreach ($query->typeswb as $typeswb) {
// $queryy = $typeswb->pivot->type_id = 1;
// }
以及其他类似的组合,但都是徒劳的,奇怪的是我得到Word::find(1)
null,而Word::all()
返回集合中6个项目的数组。
感谢您阅读,我将非常感谢任何提示或帮助。
答案 0 :(得分:0)
您可以提供数据透视表:
deviceEvent.hasAlarm()
答案 1 :(得分:0)
好吧所以我解决了这个问题,通常通过构建器组件,这个功能很容易实现,但有点不清楚如何在我自己的组件中自己做。所以,我在这里解决了这个问题:
$query = Word::whereHas('typeswb', function($q)
{
$q->where('type_id', '=', post('typesofwordsearch')); //post('typesofwordsearch') return integer which are id's of types according to the table
})->limit(5)->get();
有关工作原理的细分:
所以,可能会有另一种方式,但经过长时间的努力,这个方法有效。
首先,我正在使用我的Word模型,在单词模型中,我有typeswb
定义belongToMany
关系(请参阅问题)。我正在使用whereHas
read this获取更多相关信息。基本上使用wherehas
我指示查询查找关系。之后,在函数闭包中,我使用我的类型表中的一个键进行查询,即type_id
。对于类型表的键,请再次查看我的问题。
希望这会对某人有所帮助。干杯!