Красноречивое отношение один ко многим не работает - PullRequest
0 голосов
/ 15 февраля 2019

Я застрял на несколько часов с одной из тех проблем, в которых может помочь свежий взгляд.Я просто не могу понять, чего не хватает.

Я подключаю модель с именем User_ativo и определяю два отношения один-ко-многим с моделями Instituicao и Tipo_Ativo.

Моя база данных проста.Таблица user_ativo имеет столбцы "tipo_ativo_id" и "instituicao_id".У меня есть тестовая строка, где оба установлены в 1. Обе мои таблицы instituicoes и tipo_ativos имеют только "id" и строковое поле "nome" (name).Оба имеют запись с идентификатором == 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 возвратами ноль .

Я вполне уверен, что кто-то укажет на какую-то глупую и очевидную ошибку во всем этом, но я не могу понять, почемуодин работает, а другой нет, так как они в значительной степени одно и то же.

1 Ответ

0 голосов
/ 15 февраля 2019

Ваши имена не соответствуют соглашению Ларавел.Прочитайте приведенную ниже функцию и предоставьте foreign_key и local_key/owner_key вашим отношениям, тогда они будут работать

public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null){}

Если мы не соблюдаем соглашение о Laravel при создании отношений, то мы должны сказать ему, что это иностранные илокальные ключи, которые следует использовать. Подробнее здесь

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.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...