【问题标题】:Eloquent one to many relationship not working雄辩的一对多关系不起作用
【发布时间】:2019-07-09 05:44:09
【问题描述】:

我被其中一个问题困扰了好几个小时,而全新的眼光可能会有所帮助。我只是不明白缺少什么。

我正在连接一个名为 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');
    }
}

我的控制器获取日期的方法如下:

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

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

【问题讨论】:

  • 试试这个:$ativos = User_ativo::with('tipo')->with('instituicao')->get();
  • @InzamamIdrees 运气不好,很遗憾。
  • 显示表格结构
  • 尝试将外键添加到用户模型 public function tipo(){ return $this->belongsTo('App\Tipo_ativo', 'tipo_ativo_id'); }
  • 阅读这篇文章,我认为可能与 (stackoverflow.com/questions/16869249/…) 重复

标签: laravel eloquent


【解决方案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.
    }
}

【讨论】:

  • 没错,我已经做了一些测试,只是为了明确我的选择是手动通知外键 tipo_ativo_id 或将 User_ativo 上的方法 tipo() 更改为 @987654329 @。我的错,我知道这是一个愚蠢的问题,但我被困了太久,试图找出我的错误。
  • 我认为非正统的函数名可能是问题所在,但后来我认为它识别了Tipo_ativo 模型上的通知表名来推断外键名,而不是从函数中推断出它tipo()
猜你喜欢
  • 2020-05-30
  • 2019-06-07
  • 2012-10-08
  • 2023-04-07
  • 2019-08-13
  • 1970-01-01
  • 2018-10-27
  • 2014-05-23
相关资源
最近更新 更多