我有一个关于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')
,但这也不起作用。
感谢你。
答案 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'")