【问题标题】:Laravel using WHERE in eloquent ORMLaravel 在雄辩的 ORM 中使用 WHERE
【发布时间】:2015-01-15 16:22:44
【问题描述】:

我遇到了这个

$user = User::whereConfirmationCode($confirmation_code)->first();

在 Laravel eloquent ORM 中,你能像上面那样在 where 语句中附加表格行名吗?

在我看到这个之前,我会写

例如:$user = User::where('confirmation_code', '=', $confirmation_code)->first();

谢谢

【问题讨论】:

    标签: php laravel orm eloquent


    【解决方案1】:

    我可能错了。我不知道魔术查询生成器设置。

    那是custom query scope

    IE:具有查询范围的帖子模型,用于获取所有“状态”=已发布的帖子。

    class Post extends Eloquent {
        /**
         * Get all posts with 'status' published
         *
         * @param Illuminate\Database\Query\Builder $query
         * @return Builder $query
         */
         public function scopePublished(Builder $query)
         {
             return $query->where('status', 'published');
         }
    }
    

    然后使用它:

     Post::published()->first();
    

    注意参数可以通过将它们作为参数传递给查询生成器之后的查询范围来传递给自定义范围。

     public function scopeStatus(Builder $query, $status)
     {
         return $query->where('status', $status);
     }
    

    【讨论】:

      【解决方案2】:

      '是的,你可以在哪里建立动态。 它在简单的 where 语句中解析。 您也可以像这样构建魔术查询:

      $user = User::whereConfirmationCodeAndIdOrRole(12345, 5, 'admin')->first();
      

      它将被转换为:

      $user = User::where('confirmation_code', '=', 123456, 'and')->where('id', '=', 5, 'or')->where('role', '=', 'admin')->first();
      

      【讨论】:

      • TIL 关于动态 where;我在文件中为好奇的精灵找到了魔法酱:从文件 \vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php" 中的在线 2108 开始,然后调用 dynamicWhere 函数,让独角兽和彩虹茁壮成长
      • 在文档中没有这个怎么能梦想使用这样的语法?我的问题是一样的。如何进一步探索这种方法?我浪费了 3 个小时才找到使用“findinfiles”的whereConfirmationCode 方法
      • 您可以深入研究源代码,并研究“魔法”方法。这个魔法是通过 __call 方法完成的。 Laravel 有很多像这样很酷的魔法。我建议调查源代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2014-06-22
      • 1970-01-01
      • 2017-11-05
      • 2014-04-14
      • 1970-01-01
      • 2014-11-09
      相关资源
      最近更新 更多