出于数据库复杂性的原因,我在Laravel项目中运行查询,而不对每个表使用Model。我想要实现的是重新调整拉勒维尔的->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
的name
列和table_2
的name
列中的唯一值。然而,Laravel返回以下错误:
完整性约束违反:字段列表中的1052列'name‘不明确:选择
name
,name
从table_1中选择table_2.table_1_id左加入table_2;
现在我知道了一个模棱两可的问题,这就是为什么我把->lists("table_1.name", "table_2.name")
放在这里,但是Laravel似乎忽略了这一点。
有人知道我如何使用Laravel返回每个列中唯一值的列表吗?我想我可以为每一个人写一个SELECT DISTINCT(table_1.name), DISTINCT(table_2.name), ...
,作为最后的手段,我会这样做。
发布于 2015-05-14 16:16:11
我找到了一个可用的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");
然后,为我需要以下值的每个列向$query
对象添加一个$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
循环中使用。
发布于 2015-05-14 15:27:25
我认为可以通过在select语句中使用别名来解决这个问题:
DB::connection("example")->select(DB::raw("SELECT table_1.name AS name, ...)
然后可以在->lists(名称)中使用别名
http://forumsarchive.laravel.io/viewtopic.php?id=8730
https://stackoverflow.com/questions/30240779
复制相似问题