Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的ORM:复杂的左连接坚持使用值作为列名_Php_Sql_Laravel_Eloquent - Fatal编程技术网

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
from
wallet\u stats
left join
wallet
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
。这从语法角度来看是可行的,但会更改查询结果。这对我很有帮助。