Коллекция Laravel 2-й набор результатов отношений всегда null - PullRequest
0 голосов
/ 25 мая 2019

У меня есть запрос, в котором я возвращаю отношения один ко многим. Я ожидаю двух результатов с их отношениями.Первый результат возвращается правильно, но после первого результата я всегда получаю значение NULL для моих данных отношений для каждого результата после первого.

Если я удаляю 1-ю запись в моей базе данных, 2-я становится первой и возвращается правильно.

Это мой запрос -

$groups = DataGroup::where('post_id', $post->id)->with('data.dataType')->get();

Отношения группы данных

public function data()
{
    return $this->hasMany('App\Data', 'data_group_id');
}

Отношения данных

public function dataType()
{
    return $this->belongsTo('App\DataTypes', 'id');
}

public function dataGroup()
{
    return $this->belongsTo('App\DataGroup', 'id');
}

Отношения типа данных

public function data()
{
    return $this->hasMany('App\Data', 'data_types_id');
}

Набор результатов (удалена другая информация для удобства чтения)

Collection {#259 ▼
  #items: array:2 [▼
    0 => Data {#272 ▼
      #fillable: array:5 [▶]
      #attributes: array:8 [▶]
      #original: array:8 [▶]
      #relations: array:1 [▼
        "dataType" => DataTypes {#271 ▶}
      ]
    }
    1 => Data {#268 ▼
      #fillable: array:5 [▶]
      #attributes: array:8 [▶]
      #original: array:8 [▶]
      #relations: array:1 [▼
        "dataType" => null
      ]

Таблица групп данных

---------------------
| id | post_id      |
--------------------
| 1  | 2            |
--------------------

Таблица типов данных

---------------------
| id | label | name |
--------------------
| 1  | Text  | text |
--------------------

Таблица данных

------------------------------------------------------------
| id | data_types_id | data_group_id | field_label | value |
------------------------------------------------------------
| 1  |  1            | 1             | Title       | NULL  |
------------------------------------------------------------
| 2  |  1            | 1             | Sub Heading | NULL  |

1 Ответ

1 голос
/ 25 мая 2019

Я верю, если вы измените:

public function dataType()
{
    return $this->belongsTo('App\DataTypes', 'id');
}

в

public function dataType()
{
    return $this->belongsTo('App\DataTypes', 'data_type_id');
}

, которая должна решить проблему, в настоящее время она пытается обратиться к типу данных с идентификатором 2 (который является идентификатором данных 2), который не существует.

Посмотрите на нижнюю часть параграфа https://laravel.com/docs/5.8/eloquent-relationships#one-to-one, в нем описано, что вам необходимо вводить внешний ключ как 2-ю переменную определения взаимосвязи, а не локальный ключ.

КСТАТИ: У ваших других отношений такая же проблема:

public function dataGroup()
{
    return $this->belongsTo('App\DataGroup', 'id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...