【问题标题】:Laravel 5 WhereIn Not WorkingLaravel 5 哪里不工作
【发布时间】: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 查看更新。它至少正在循环。但仍然产生相同的结果。我很困惑!

标签: php eloquent laravel-5


【解决方案1】:

试试这个

$postcode_extract->orWhereIn($column, $values)

另外,如果这不起作用,请尝试将第一个条件设为 whereIn,将其余条件设为 orWhereIn

【讨论】:

  • 我不知道 orWhereIn.. 但即使这样仍然会产生相同的结果。整个循环只是被忽略了。查看原始帖子的更新
【解决方案2】:

哦,这太令人沮丧了,我想我可能会哭……

foreach ($input as $column => $values) {
        $postcode_extract = $postcode_extract->orWhereIn($column, $values);     
}

【讨论】:

  • @lukasgeiter - 你知道为什么吗?我被它弄糊涂了
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 2018-09-25
  • 2013-12-28
  • 2018-09-08
  • 2018-02-07
  • 2018-08-03
  • 2015-05-09
相关资源
最近更新 更多