Php 雄辩的ORM:复杂的左连接坚持使用值作为列名
在我的一个模型中,我有以下雄辩的疑问:Php 雄辩的ORM:复杂的左连接坚持使用值作为列名,php,sql,laravel,eloquent,Php,Sql,Laravel,Eloquent,在我的一个模型中,我有以下雄辩的疑问: return self::where('sequence', '=', $sequence)->where('interval', '=', $minutes) ->leftJoin('wallet', 'wallet_stats.wallet_id', '=', 'wallet.id') ->leftJoin('balance', function($join) use ($uid)
return self::where('sequence', '=', $sequence)->where('interval', '=', $minutes)
->leftJoin('wallet', 'wallet_stats.wallet_id', '=', 'wallet.id')
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id')
->on('balance.user_id', '=', $uid);
})
->orderBy('volume', 'ASC')->get(['symbol', 'name', 'volume', 'start_price', 'end_price']);
我遇到的问题是以下错误消息:
哎呀!SQLSTATE[42S22]:未找到列:中的1054未知列“2”
“on子句”(SQL:选择符号
,名称
,卷
,起始价格
,
end\u price
fromwallet\u stats
left joinwallet
on
wallet\u stats
wallet\u id
=wallet
id
左键加入余额
开启
余额
钱包id
=钱包统计数据
钱包id
和
余额
用户id
=2
其中顺序
=0和间隔
=1440
按volume
asc)订购
出于某种原因,Eloquent坚持使用$uid的值(在第二个“on”连接条件中)作为列名,而不是文字值
有人知道如何绕过这个问题,让它在这样的连接规范中接受一个文本值吗?我似乎不能完全复制您的错误,但这是我在过去的实例中使用的。Giedrius Kiršys在对你的问题的评论中的建议也是好的
return self::where('sequence', '=', $sequence)->where('interval', '=', $minutes)
->leftJoin('wallet', 'wallet_stats.wallet_id', '=', 'wallet.id')
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id')
->on('balance.user_id', '=', \DB::raw($uid));
})
->orderBy('volume', 'ASC')->get(['symbol', 'name', 'volume', 'start_price', 'end_price']);
这假设您还没有导入DB
,如果您已经删除了\
使用->where()作为第二个on子句,例如
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id');
$join->where('balance.user_id','=', $uid);
})
或者,对on子句值使用DB::raw()
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id');
$join->on('balance.user_id', '=', DB::raw($uid));
})
将上的第二个
替换为where
。这从语法角度来看是可行的,但会更改查询结果。这对我很有帮助。