由于数据库复杂性的原因,我在Laravel项目中运行查询而不为每个表使用Model。我想要完成的是重新调整Laravel的->lists("column_1", "column_2", "...")
会得到的结果。基本上,我正在查询表,将其连接到其他四个表,并将结果输出到表中。
以下是我尝试运行以获取结果的查询示例:
DB::connection("example")->select(DB::raw("SELECT table_1.name, table_2.name FROM table_1 LEFT JOIN table_2 ON table_2.table_1_id = table_2.id WHERE table_2.status = 'something';"));
基本上,我尝试使用以下链式查询将其转换为雄辩:
DB::connection("example")
->table("table_1")
->leftJoin("table_2", "table_2.table_1_id", "=", "table_1.id")
->lists("table_1.name", "table_2.name")
->where("table_2.status", "=", "something");
此应该做的是返回table_1
&#39 {s} name
列和table_2
' {{ {1}}列。但是,Laravel会返回以下错误:
完整性约束违规:1052列'名称'在字段列表中是不明确的:SELECT`name`,`name` FROM table_1 LEFT JOIN table_2 ON table_2.table_1_id;
现在我知道存在歧义问题,这就是我放name
的原因,但是Laravel似乎忽略了这一点。
有谁知道如何使用Laravel 返回每列中的唯一值列表?我想我可以为每个人写一个->lists("table_1.name", "table_2.name")
,我会这样做作为最后的手段。
答案 0 :(得分:1)
我找到了一个可用的Laravel解决方案,它不使用列表,但完成了同样的事情。首先,我在没有->lists()
闭包的情况下准备查询:
$query = DB::connection("example")
->table("table_1")
->leftJoin("table_2", "table_2.table_1_id", "=", "table_1.id")
->where("table_2.status", "=", "something");
然后,为->select(...)->get()
对象添加$query
个闭包,为每个我需要以下值的列:
$table_1_names = $query->select("table_1.name" AS "Table 1 Name")->distinct()->get();
$table_2_name = $query->select("table_2.name" AS "Table 2 Name")->distinct()->get();
在其中任何一个变量上调用dd()
将返回该特定列中所有唯一值的数组,该数组可用于视图中的foreach
循环。
答案 1 :(得分:0)
我认为这可以通过在select语句中使用别名来解决:
DB::connection("example")->select(DB::raw("SELECT table_1.name AS name, ...)
然后您可以使用 - >列表(名称)
中的别名