雄辩的一对多关系不起作用

时间:2019-02-15 05:41:00

标签: laravel eloquent

我被这些问题困扰了几个小时,而新的眼睛可能会有所帮助。我只是不明白所缺少的东西。

我正在连接一个名为User_ativo的模型,并为模型InstituicaoTipo_Ativo定义了两个一对多关系。

我的数据库很简单。 表user_ativo的列为“ tipo_ativo_id”和“ instituicao_id”。我有一个测试行,两者都设置为1。我的表instituicoestipo_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

我非常确信有人会指出所有这些愚蠢而明显的错误,但是我无法终生理解为什么一个有效而另一个却无效,因为它们几乎相同东西。

1 个答案:

答案 0 :(得分:1)

您的关系名称不符合laravel约定。 阅读以下功能,并为您的关系提供foreign_keylocal_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.
    }
}