PHP laravel框架where条件报错没有说没有加引号该怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP laravel框架where条件报错没有说没有加引号该怎么写相关的知识,希望对你有一定的参考价值。

DB::table('admin')->where('username','like','iam%')->get();这条语句给我报图上的错 是因为值没有加引号 可是我值加引号了 单引号双引号都用了 都不好使

参考技术A 这个报错的意思是 你的test数据库下没有admin这个表所以抛出异常
你可以试一下看看你的数据库底下有没有这个表 如果有的话,
如果你用的是模型对应关系的话有可能是模型对应表没有找到
在模型关系里用protected $table = '表名';指定一下就好

Laravel 4:将 where 子句添加到连接条件

【中文标题】Laravel 4:将 where 子句添加到连接条件【英文标题】:Laravel 4: Adding where clause to a join condition 【发布时间】:2014-01-19 17:39:38 【问题描述】:

它在laravel docs 中说可以在连接上添加 where 子句,但是每当我尝试使用 where 子句在我的代码中,我得到错误:Call to undefined method Illuminate\Database\Query\JoinClause::where()。有人知道如何在join子句中添加where子句吗?

Laravel 网站示例:

DB::table('users')
->join('contacts', function($join)

  $join->on('users.id', '=', 'contacts.user_id')
  ->where('contacts.user_id', '>', 5);
)
->get();

我正在尝试实现的代码:

DB::table('users')
->join('contacts', function($join)

  $current_date = date('Y-m-d');
  $join->on('users.id', '=', 'contacts.user_id')
  ->where('contacts.effective_date', '>=', $current_date);
)
->get();

【问题讨论】:

您将错误的变量传递给 where 子句尝试更正。 好的,更新了变量名,但问题依旧。 尝试在 where 子句中只使用 > ...... 【参考方案1】:

如果您想在 join 上添加更多条件,请添加更多 $join->on$join->orOn

如果您想为您的第一个选择添加条件,请将其添加到连接函数之外。

DB::table('users')
->join('contacts', function($join)

    $date = date('Y-m-d');
    $join->on('users.id', '=', 'contacts.user_id');
)
->where('contacts.effective_date', '>=', $date);
->get();

更新 在我认为您使用的 Laravel 4.0 中,您不能在连接闭包中使用 where,但由于 Laravel 4.1 及更高版本,您可以在连接条件之后使用 where 条件。我找不到 Laravel 4.1 的文档,但 this is the #join documentation for L4.2 and above

【讨论】:

我不能使用'on',因为它不能使用静态日期加入。我想做的是在将结果加入其他表之前对其进行过滤,这实际上会缩短执行时间。 还要注意这个:github.com/laravel/framework/issues/3681 这样做时绑定搞砸了。【参考方案2】:

请查看下面的答案

DB::table('users')
        ->join('contacts', function($join)
        
            $join->on('users.id', '=', 'contacts.user_id')
                 ->where('contacts.user_id', '>', 5);
        )
        ->get();

【讨论】:

【参考方案3】:

试试这个解决方案

 DB::table('users')
            ->join('contacts', function($join)
            
                $current_date = date('Y-m-d');
                $join->on('users.id', '=', 'contacts.user_id')
                     ->where('contacts.effective_date', '>', $current_date)
             ->where('contacts.effective_date', '=', $current_date);

            )
            ->get();

【讨论】:

这就是问题所在。当我添加上面问题中所述的 where 子句时出现错误。【参考方案4】:
$current_date = date('Y-m-d');
DB::table('users')
->join('contacts', function($join) use ($current_date)

  $join->on('users.id', '=', 'contacts.user_id')
      ->where('contacts.effective_date', '>=', $current_date);
)
->get();

【讨论】:

【参考方案5】:

您正在调用 $current_date 但您取消了 $date

DB::table('users')
->join('contacts', function($join)

  $date = date('Y-m-d');
  $join->on('users.id', '=', 'contacts.user_id')
  ->where('contacts.effective_date', '>=', $date);
)
->get();

不知道这样能不能解决问题,试试看;)

【讨论】:

【参考方案6】:

您确定您使用的是 laravel 4.1?我认为您使用的是 laravel 4.0 而不是 4.1。查看您的 composer.json 文件。

【讨论】:

这更多的是评论而不是问题的答案【参考方案7】:

get() 函数调用之前添加它

->where('contacts.effective_date', '=', $current_date);

【讨论】:

【参考方案8】:
$users = DB::table('users')
    ->join('contacts', 'users.id', '=','contacts.user_id')
    ->join('orders', 'users.id', '=', 'orders.user_id')
    ->select('users.*', 'contacts.phone', 'orders.price')->get();

https://laravel.com/docs/5.6/queries请查看此链接

【讨论】:

以上是关于PHP laravel框架where条件报错没有说没有加引号该怎么写的主要内容,如果未能解决你的问题,请参考以下文章

php框架 laravel 多重条件查询。对数据库查询,在满足日期范围查询的同时在满足一个或几个条件查询。

laravel框架where查询json格式的数据

后端PHP框架laravel学习踩的各种坑

Laravel 4:将 where 子句添加到连接条件

在laravel框架中 使用artisan 命令 没有反应 也不报错 是啥原因 是我配置的原因吗?

laravel框架orderBy问题