Laravel使用 - >在非雄辩模型上列出()

时间:2015-05-14 15:07:48

标签: php mysql laravel eloquent laravel-5

由于数据库复杂性的原因,我在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"),我会这样做作为最后的手段。

2 个答案:

答案 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, ...)

然后您可以使用 - >列表(名称)

中的别名

http://forumsarchive.laravel.io/viewtopic.php?id=8730