【问题标题】:Stuck one to one relationship laravel卡住一对一的关系 laravel
【发布时间】:2019-05-17 03:28:36
【问题描述】:

大家好,我是 Laravel 的新手 我需要你的帮助。这是我的数据库:

user: id, name, surname, email, role

user_informations: id, user_id, status

我想要所有启用状态的用户的名称。

我要做的是:

用户.php

public function information()
    {
        return $this->hasOne('App\UserInformation');
    }

用户信息.php

 public function guider()
    {
        return $this->belongsTo('App\User');
    }

这是我的查询:

 $users =User::where('role', '2')->information()->get();

调用未定义的方法 Illuminate\Database\Eloquent\Builder::information()

我知道我的查询是错误的,因为我没有在任何地方定义我想要让所有状态为“启用”的用户

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    你需要搭配使用

    $users = User::where('role', '2')->with('information')->get();
    

    $users =User::where('role', '2')->get();
    
    foreach($users as $user) {
        dump($user->information);
    }
    

    【讨论】:

      【解决方案2】:

      获取所有具有“启用”状态和“2”角色的用户:

      $users = User::where('role', '2')->with(['information' => function($query) {
               $query->where('status', 'enable');
      }])->get();
      

      您可以使用 Eager Loading 关键字找到有关 Laravel 文档的更多详细信息。

      您也可以阅读this topic 了解其工作原理。

      【讨论】:

        【解决方案3】:

        你应该使用whereHas()这个方法的第一个参数是你的关系,第二个是你的回调函数

        $users =User::where('role', '2')->whereHas('information',function($query){
            return $query->where('status','enable')
        })->get();
        

        【讨论】:

          猜你喜欢
          • 2018-09-27
          • 2014-08-22
          • 2018-10-03
          • 2018-05-29
          • 2013-10-21
          • 2014-06-24
          • 1970-01-01
          • 2018-04-20
          相关资源
          最近更新 更多