【发布时间】:2015-05-06 10:23:24
【问题描述】:
我不知道为什么我的查询突然不起作用(尽管它可能从一开始就不起作用)。这里有什么问题吗?
我的控制器;
$dataset = $postcode_lookup->dataset; // will return "201502_postcode"
$postcode_extract = new PostcodeExtract;
$postcode_extract = $postcode_extract->setTableByDate($dataset);
foreach ($input as $column => $values) {
$postcode_extract->orWhere(function ($query) use ($column, $values) {
$query->whereIn($column, $values);
});
}
/*
* Temporarily print out the raw SQL...
*/
$sql = str_replace(['%', '?'], ['%%', "'%s'"], $postcode_extract->toSql());
$fullSql = vsprintf($sql, $postcode_extract->getBindings());
print_r($fullSql);
exit;
我的模型;
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class PostcodeExtract extends Model {
protected $connection = 'postcodes';
public function setTableByDate($selected_tablename)
{
$this->table = $selected_tablename;
// Return $this for method chaining
return $this;
}
public function getTable()
{
if (isset($this->table))
$this->setTableByDate($this->table);
return $this->table;
}
原始 sql 的所有打印输出返回的是 select * from 201502_postcode,只是忽略了查询的其余部分。
这是我的$input 数组;
Array
(
[country] => Array
(
[0] => L93000001
[1] => M83000003
)
[county] => Array
(
[0] => 95
)
)
orWhere 和 whereIn 似乎只是被忽略了..
--- 更新 ---
我不知道 orWhereIn。但是试过这个;
foreach ($input as $column => $values) {
$postcode_extract->orWhereIn($column, $values);
print "<br>";
print $column;
print "<br>";
print_r($values);
print "<br>";
}
我仍然得到相同的结果。就像这个循环被完全忽略了——即使我可以让这些 print's/print_r's 工作。原始 SQL 仍然只是 select * from 201502_postcode。
【问题讨论】:
-
我认为这里不需要嵌套 where。也许试试
orWhereIn()?还请验证循环是否真的有效。 (例如echo) -
您应该将
foreach包裹在where(function ...)中,并在闭包内简单地使用orWhereIn。 -
@lukasgeiter 查看更新。它至少正在循环。但仍然产生相同的结果。我很困惑!