【问题标题】:where condition with HasOne laravelHasOne laravel 的条件
【发布时间】:2016-07-14 09:03:06
【问题描述】:

在登录模型中我已经实现了与图片表的关系

function picture () {
   return $this->hasOne('App\Picture');
}

现在我想要 Picture.picture_status = 1 和 User.user_status = 1 的数据

Login::with('picture')->where('picture_status', 1)->where('user_status',1);

但是条件不适用于图片表,我如何在两个表上实现和条件

【问题讨论】:

    标签: laravel has-one


    【解决方案1】:

    应该这样做:

    Login::with(['picture' => function ($query) {
        $query->where('picture_status', 1)->where('user_status',1);
    }])->get();
    

    有时您可能希望预先加载关系,但还要为预先加载查询指定额外的查询约束 https://laravel.com/docs/5.2/eloquent-relationships#constraining-eager-loads

    【讨论】:

      【解决方案2】:
      class Login extends Model
      {
          protected $primaryKey = 'id';
      
          function picture () {
             return $this->hasOne('App\Picture', 'id', 'user_id')->where('picture_status', 1)->where('user_status',1)->first();
          }
      }
      

      你可以这样调用;

      $usersWithProfilePictures = Login::with('picture')->get();
      

      【讨论】:

      • 不需要在末尾附加first()
      • 如果在末尾添加first()$login->picture 将返回null。由于您将 picture 视为方法,而不是模型属性。你应该删除first(),然后你可以像模型属性一样调用它,$login->picture
      【解决方案3】:
      class Login extends Model
      {
          protected $primaryKey = 'id';
      
          function picture () {
             return $this->hasOne('App\Picture', 'id', 'user_id');
          }
      
          ................
          public function myF(){
               self::with('picture')->where('picture_status', 1)->where('user_status',1)->get();
          }
      }
      

      【讨论】:

        【解决方案4】:

        如果有人仍然偶然发现这个问题。检索正确记录的最佳方法是使用 Laravel Query Builder 和 join:

        $logins = DB::table('logins')
                    ->join('pictures', 'logins.id', '=', 'pictures.login_id')
                    ->select('logins.*', 'pictures.status')
                    ->where('logins.status', 1)
                    ->where('pictures.status', 1)
                    ->get();
        

        您可以通过https://laravel.com/docs/6.x/queries#joins了解更多信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-06
          • 2018-12-06
          • 1970-01-01
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多