Laravel或给出意外结果的地方

时间:2018-08-20 07:18:57

标签: mysql laravel

我有一个查询。

  $bid_check        =     Bidders::where([

                                          'project_id'  =>    $id,

                                          'status'      =>    1,

                                          'active'      =>    1,

                                        ])

                                        ->orWhere([

                                                  'project_id'  =>    $id,

                                                  'status'      =>    2,

                                                  'active'      =>    1

                                                ])

                                ->first();

                                print_r($bid_check);die;

当我不使用or编写它时,它没有显示任何结果,但是,当我编写or编写它时,它给了我数据库的第一列,这是错误的。 where和orWhere中的条件与数据库中的任何列都不匹配。因此,它应该返回空,但它正在返回数据库的第一列。为什么要返回值,有人遇到过同样的问题吗?

4 个答案:

答案 0 :(得分:1)

尝试一下:

function status(response) {
  if (response.status >= 200 && response.status < 300) {
    return Promise.resolve(response)
  } else {
    return Promise.reject(new Error(response.statusText))
  }
}

function json(response) {
  return response.json()
}


fetch('https://apis.mapmyindia.com/advancedmaps/v1/+apikey+/autosuggest?q=delhi',{mode: 'no-cors'})
  .then(status)
  .then(json)
  .then(function(data) {
    console.log('Request succeeded with JSON response', data);
  }).catch(function(error) {
    console.log('Request failed', error);
  });

答案 1 :(得分:1)

最好使用whereIn函数

Bidders::where(['project_id'=>$id,'active'=>1])
         ->whereIn('status', [1,2])
         ->first();

我认为orWhere中的数组是作为or子句的列表而不是作为and子句的列表创建的,因此您将拥有or project_id = $id or active = 1 or status = 2

如果上述内容正确,则应执行以下操作

->orWhere(function($query) {
     return $query->where([
       'project_id'  =>    $id,
       'status'      =>    2,
       'active'      =>    1
    ]);
});

答案 2 :(得分:0)

尝试以下代码。

>############################################################
>#                 BUILDING CONTAINER IMAGES                #
>############################################################
>Sending build context to Docker daemon  2.048kB
>Step 1/3 : FROM docker.io/hyperledger/fabric-orderer:x86_64-1.0.2
> ---> 6efd17e86e65
>
>Step 2/3 : RUN mkdir /orderer
> ---> Using cache
> ---> 765112c8f6ce
>
>Step 3/3 : COPY crypto /orderer/crypto
>
>COPY failed: stat /var/lib/docker/tmp/docker-builder056982429/crypto: no >such file or directory
>
>Pulling shop-ca (shop-ca:latest)...
>
>ERROR: pull access denied for shop-ca, repository does not exist or may >require 'docker login'

答案 3 :(得分:0)

您应该尝试以下操作:

$bid_check =     Bidders::where('active', 1)
                            ->where('project_id', $id)
                            ->where(function ($query) {
                                   $query->where('status', 1)->orWhere('status', 2);
                             })
                           ->first();