Eloquent - 使用字符串值而不是列标题的join子句

时间:2014-06-27 10:06:58

标签: php mysql laravel eloquent

我有一个关于Eloquent中的join子句的问题,以及你是否可以加入字符串值而不是表列。

我有下面的代码查询一个嵌套的集合,在表格中加入父/子记录'目的地'通过表格分类'。

关闭中的第二个$join语句是引起问题的语句; Eloquent假设这是一个列,当我真的只想加入t1.parent_type = 'Destination'时 - 即t1.parent_type应该=一个字符串值,Destination

$result = DB::connection()
    ->table('destinations AS d1')
    ->select(array('d1.title AS level1', 'd2.title AS level2'))
    ->leftJoin('taxonomy AS t1', function($join) {
        $join->on('t1.parent_id', '=', 'd1.id');
        $join->on('t1.parent_type', '=', 'Destination');
    })
    ->leftJoin('destinations AS d2', 'd2.id', '=', 't1.child_id')
    ->where('d1.slug', '=', $slug)
    ->get();

是否有可能强迫Eloquent这样做?我尝试用'Destination'替换DB::raw('Destination'),但这也不起作用。

感谢你。

2 个答案:

答案 0 :(得分:17)

实现目标的另一个最佳方法是:

$result = DB::connection()
    ->table('destinations AS d1')
    ->select(array('d1.title AS level1', 'd2.title AS level2'))
    ->leftJoin('taxonomy AS t1', function($join) {
        $join->on('t1.parent_id', '=', 'd1.id');
        $join->where('t1.parent_type', '=', 'Destination');
    })
    ->leftJoin('destinations AS d2', 'd2.id', '=', 't1.child_id')
    ->where('d1.slug', '=', $slug)
    ->get();

on替换为where

答案 1 :(得分:7)

尝试使用DB::raw("'Destination'")