通过数据透视表Octobercms从表中检索条目

时间:2017-06-30 11:08:17

标签: php mysql laravel-5 octobercms

任何人都可以帮我写查询从我的单词表中检索单词,使得单词通过类型数据透视表与类型模型具有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个项目的数组。

感谢您阅读,我将非常感谢任何提示或帮助。

2 个答案:

答案 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。对于类型表的键,请再次查看我的问题。

希望这会对某人有所帮助。干杯!