Laravel - exists()方法在生产服务器

时间:2016-12-11 00:49:17

标签: php laravel

我刚遇到这个奇怪的问题。我正在将我的代码部署到测试服务器,一切都是一样的。

我有一个简单的$laptop = Laptops::where('name', 'Mac')->first() ?: new BlankLaptop();

BlankLaptop类是一个扩展Laptops类的空类。

然后我做

if ($laptop->exists()) // do something

问题是它总是在生产中返回true,即使在我dd($laptop)时,结果是生产服务器和本地服务器中的相同

然而,当我执行$laptop->exists(没有括号)时,它会返回正确的值。

->exists()->exists之间是否存在差异?

感谢。

1 个答案:

答案 0 :(得分:5)

肯定存在差异。

  1. $laptop->exists检查模型上的the exists property,确定当前模型是否已保存到数据库中。

  2. $laptop->exists()在查询构建器上调用the exists method。它等同于:

    $doesAnyLaptopExist = Laptop::query()->exists();
    

    ...运行此SQL语句:

    select exists(select * from `laptops`)
    

    ...确定表格中是否有任何记录。

  3. 巨大差异。