Laravel hasManyThrough()没有返回任何结果

时间:2018-02-01 08:32:28

标签: sql eloquent laravel-5.4

我有3个桌子,我希望通过另一个使用雄辩的

加入其中的两个
ProductGroup table

--------------------------
| ProductGroupId | Name  |
-------------------------
| 1              | Test1 |
| 2              | Test2 |
--------------------------

ProductLine table
-------------------------------------------------
| ProductLineId | ProductGroupId | Name         |
------------------------------------------------|
| 1              | 1             | AnotherTest1 |
| 2              | 1             | AnotherTest2 |
-------------------------------------------------

ProductType table
----------------------------------------------
| ProductTypeId | ProductLineId | Name       |
---------------------------------------------|
| 1             | 1             | Something1 |
| 2             | 1             | Something2 |
----------------------------------------------

我想加入ProductGroup与ProductType

我尝试使用它作为我的ProductGroup模型(不确定我是否正确完成了hasManyThrough())

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProductGroup extends Model
{
    protected $primaryKey = 'ProductGroupId';
    public $timestamps = false;

    public function producttype()
    {
        return $this->hasManyThrough('App\ProductGroup', 'App\ProductLine', 'ProductGroupId', 'ProductGroupId');
    }
}

我想在ProductGroup表中加入特定id的2个表,所以在SQL中它实际上是

SELECT * FROM ProductType pt
        INNER JOIN ProductLine pl ON 
            pt.ProductLineId = pl.ProductLineId
        INNER JOIN ProductGroup pg ON 
            pg.ProductGroupId = pl.ProductGroupId
    WHERE pg.ProductGroupId = 3

我试过这个但是没有结果

我可以在查询构建器中执行此操作,但如果可以帮助我,请使用eloquent

$test = ProductGroup::with('producttype')->whereHas('producttype', function ($query) {
    $query->where('ProductGroup.ProductGroupId', 3);
})->get();

1 个答案:

答案 0 :(得分:1)

更改

public function producttype()
{
    return $this->hasManyThrough('App\ProductGroup', 'App\ProductLine', 
    'ProductGroupId', 'ProductGroupId');
}

public function producttype()
{
    return $this->hasManyThrough('App\ProductType', 'App\ProductLine', 'ProductGroupId', 'ProductLineId');
}