我的一个模型中有以下Eloquent Query:
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'在 '关于条款' (SQL:选择
symbol
,name
,volume
,start_price
, 来自end_price
的{{1}}已离开加入wallet_stats
wallet
。wallet_stats
=wallet_id
。wallet
离开加入id
balance
。balance
=wallet_id
。wallet_stats
和wallet_id
。balance
=user_id
其中2
= 0且sequence
= 1440 按interval
asc)订购
出于某种原因,Eloquent坚持使用$ uid的值(在第二个" on" join条件下)作为列名而不是文字值。
有没有人知道如何解决这个问题并让它接受这种连接规范中的字面值?
答案 0 :(得分:1)
我似乎无法复制您的错误,但这是我在过去的实例中使用的。 GiedriusKirš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
\
答案 1 :(得分:1)
使用 - > where()表示第二个on子句,例如
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id');
$join->where('balance.user_id','=', $uid);
})
或者,将DB :: raw()用于on子句值
->leftJoin('balance', function($join) use ($uid)
{
$join->on('balance.wallet_id', '=', 'wallet_stats.wallet_id');
$join->on('balance.user_id', '=', DB::raw($uid));
})