Laravel =父母 - 同一桌上的孩子

时间:2017-11-19 13:29:14

标签: laravel

MAIN TABLE

id  | parent_id | form_id   | is_approved   | fruit_id
------------------------------------------------------
1   | 0         | 1         | 1             | 1
2   | 1         | 2         | 1             | 2
3   | 0         | 1         | 1             | 3
4   | 3         | 2         | 0             | 4

FRUIT TABLE

id  | name
------------
1   | cherry
2   | guava
3   | apple
4   | grapes

通过在主表上引用,我需要从Fruit Table中输出具有以下内容的行的所有水果名称:

1。)parent_id!= 0

2。)is_approved = 1

怎么做?请帮忙!

3 个答案:

答案 0 :(得分:0)

$fruitNames = DB::table('main')->where([['parent_id', '>=', 1],['is_approved', '=', 1]])->join('fruit_names')->get(['fruit_names.name']);

答案 1 :(得分:0)

我做到了!

$fruitNames = main::select('main.id', 'b.name')
      ->join('fruit_names as b', 'b.id', '=', 'main.fruit_id')
      ->join('main as c', 'c.id', '=', 'main.parent_id')
      ->where('main.parent_id', '!=', 0)
      ->where('c.is_approved', 1)
      ->get();

我想知道这个查询是否可以改进。

答案 2 :(得分:0)

假设你有一个水果模型,主要关系你可以做到这一点,它会给你一系列符合你标准的水果模型。

$fruits = Fruit::whereHas('main', function ($query) {
    $query->where('parent_id', '!=', 0)
          ->where('is_approved', 1);
})->get();