我被这些问题困扰了几个小时,而新的眼睛可能会有所帮助。我只是不明白所缺少的东西。
我正在连接一个名为User_ativo
的模型,并为模型Instituicao
和Tipo_Ativo
定义了两个一对多关系。
我的数据库很简单。
表user_ativo
的列为“ tipo_ativo_id”和“ instituicao_id”。我有一个测试行,两者都设置为1。我的表instituicoes
和tipo_ativos
都只有“ id”和一个字符串字段“ nome”(名称)。两者都具有id == 1的记录。
User_ativo.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User_ativo extends Model
{
public function tipo(){
return $this->belongsTo('App\Tipo_ativo');
}
public function instituicao(){
return $this->belongsTo('App\Instituicao');
}
}
Instituicao.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Instituicao extends Model
{
protected $table = 'instituicoes';
public function user_ativos(){
return $this->hasMany('App\User_ativo');
}
}
Tipo_ativo.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tipo_ativo extends Model
{
protected $table = 'tipo_ativos';
public function user_ativos(){
return $this->hasMany('App\User_ativo');
}
}
获取日期的 controller 方法如下:
public function index()
{
$ativos = User_ativo::with('tipo', 'instituicao')->get();
return view('ativos.index', compact('ativos'));
}
现在这是有趣的地方,由于某种原因我不知道,当我在视图中回显$ ativos变量时,我得到了:
[{"id":1,"user_id":1,"instituicao_id":1,"tipo_ativo_id":1,"tipo":null,"instituicao":{"id":1,"nome":"Banco do Brasil"}}]
因此,很奇怪,我与Instituicao
模型的关系正常,但是与Tipo_ativo
的模型返回 null 。
我非常确信有人会指出所有这些愚蠢而明显的错误,但是我无法终生理解为什么一个有效而另一个却无效,因为它们几乎相同东西。
答案 0 :(得分:1)
您的关系名称不符合laravel约定。
阅读以下功能,并为您的关系提供foreign_key
和local_key/owner_key
,然后它将起作用
public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null){}
如果在创建关系时不遵循laravel约定,那么我们必须告诉他们这些是应使用的外键和本地键。 Read more here
class User_ativo extends Model{
public function tipo(){
return $this->belongsTo('App\Tipo_ativo','user_ativo_id'); //second parameter is foreign_key_of_User_avito_table_here
}
public function instituicao(){
return $this->belongsTo('App\Instituicao','user_ativo_id'); //second parameter is foreign_key_of_User_avito_table_here
}
}
class Instituicao extends Model
{
protected $table = 'instituicoes';
public function user_ativos(){
return $this->hasMany('App\User_ativo','instituicao_id'); //second parameter is foreign key of Instituicao model
}
}
class Tipo_ativo extends Model
{
protected $table = 'tipo_ativos';
public function user_ativos(){
return $this->hasMany('App\User_ativo','tipo_ativo_id'); //second parameter is foreign key of Tipo_ativo model.
}
}