实现与laravel 5的连接

时间:2016-01-04 16:22:39

标签: php laravel eloquent

我正在尝试实施以下连接查询

SELECT * from users as u

LEFT JOIN `table1` as ou

ON ou.user_id = u.id

LEFT JOIN table2 as o

ON o.id = ou.orid

LEFT JOIN table3 as p

ON o.pra_id = p.id;

使用我的laravel模型,所以我在我的用户模型中使用以下代码创建一个名为alldata()的函数

public function alldata()

{

    return $this

        ->leftjoin('table1','users.id','=','table1.user_id')

        ->leftjoin('table2','table1.orid','=','table2.id')

        ->leftjoin('table3','table2.pra_id','=','table3.id');

}
  

现在,当我尝试通过$ gd = User :: find(1) - > getall()访问数据时,它会返回包含所有表的结果   但当我尝试访问$ gd = User :: all() - > alldata()时,它会发现错误的mathod未找到   我怎么解决这个问题   感谢

1 个答案:

答案 0 :(得分:1)

User :: find(1)函数返回对象的单个实例(如果未找到则返回NULL)。

User :: all()函数返回所有User对象的Collection。

您需要创建一个查询,然后按以下方式获取()结果...

public static function alldata()
    {

    return self::query()
        ->leftjoin('table1','users.id','=','table1.user_id')
        ->leftjoin('table2','table1.orid','=','table2.id')
        ->leftjoin('table3','table2.pra_id','=','table3.id')
        ->get();
}

假设您的alldata()方法在User类中,您可以使用以下代码调用该函数:

User::alldata();

Laravel拥有一个出色的数据库关系系统,这是最值得关注的。它会使上面的查询变得更简单......

https://laravel.com/docs/5.1/eloquent-relationships