Laravel Eloquent如何将3对表中的多对多和一对多的关系结合起来

时间:2016-09-15 21:25:19

标签: laravel eloquent laravel-5.2

我有这样的数据库。

+----------------+
| Tables_in_test |
+----------------+
| a_b            |
| a_c            |
| as             |
| bs             |
| cs             |
+----------------+

bs和cs表与表有很多关系。所以a_b表和a_c表是数据透视表。

这是表格

+----+------+
| id | name |
+----+------+
|  1 | A1   |
|  2 | A2   |
+----+------+

这是bs表

+----+------+
| id | name |
+----+------+
|  1 | B1   |
+----+------+

这是cs表

+----+------+------+
| id | b_id | name |
+----+------+------+
|  1 |    1 | C1   |
|  2 |    1 | C2   |
+----+------+------+

这是a_b透视表

+------+------+
| a_id | b_id |
+------+------+
|    1 |    1 |
+------+------+

这是a_c数据透视表。

+------+------+
| a_id | c_id |
+------+------+
|    1 |    1 |
|    2 |    2 |
+------+------+

这是我的as表的模型。

class A extends Model
{
    protected $table = "as";
    public function b(){
        return $this->belongsToMany("App\B");
    }
    public function c(){
        return $this->belongsToMany("App\C");
    }
}

这是bs表的B模型

class B extends Model
{
    protected $table = "bs";
    public function c(){
        return $this->hasMany("App\C");
    }
}

我只想查询与A表相关的C表值。

我试过了这个查询

A::where("id",1)->with("b.c")->get();

但是这个结果也给了我C2值,它与“ as ”表中的A2有关。我想只得到C1值,它只与“ as ”表中的A1值相关。

我该怎么做?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

在您的示例中,数据A1与B1有关,而B1又与C2有关。事实上,您正在嵌套b.c急切负载,因此您正在加载与这些B相关的B和C。

你试过A::where("id",1)->with(["b", "c"])->get();