Vra*_*nvs 0 php mysql database laravel eloquent
我正在尝试获取与数据库中的应用程序相关的信息.
我正在返回一个带有如此口才的查询的视图:
$active_applications = Application::with('applicant', 'puppy')->where('kennel_id', '=', $user_kennel->id)->get();
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序模型中定义了一些关系,如下所示:
public function puppy(){
return $this->belongsTo('App\Puppy');
}
public function applicant(){
return $this->belongsTo('App\User');
}
Run Code Online (Sandbox Code Playgroud)
当视图加载时,我能够获得与'puppy'相关的信息.它正确检索.然而,申请人保持无效.
我在我的应用程序表中有一个名为"user_id"的列,我希望它在该列中使用value来搜索users表'id',并检索用户的信息.但是它保持为空.以下是有问题的变量的dd():
我错过了一些明显的东西吗 为什么要找回一个而不是另一个?
你的关系错了 -
public function applicant(){
return $this->belongsTo('App\User');
}
Run Code Online (Sandbox Code Playgroud)
如果不将外键作为参数传递,则laravel会查找method name+ '_id'.因此,在您的情况下,laravel正在查找applicant_id应用程序表中的列.
所以,要获得结果有两种方法 -
1)您需要更改方法名称 -
public function user(){
return $this->belongsTo('App\User');
}
Run Code Online (Sandbox Code Playgroud)
**2)传递外键作为第二个参数 - **
public function applicant(){
return $this->belongsTo('App\User', 'user_id');
}
Run Code Online (Sandbox Code Playgroud)
Laravel 5.6 doc - belongsTo
如果它是一对多(逆)关系 -
Eloquent通过检查关系方法的名称并使用_后跟主键列的名称为方法名称添加后缀来确定默认外键名称.
如果它是一对一的关系 -
Eloquent通过检查关系方法的名称并使用_id为方法名称添加后缀来确定默认外键名称.