Laravel 8: как получить данные об отношениях «один к одному» в существующей базе данных?

#laravel #eloquent #laravel-8 #one-to-one

Вопрос:

У меня возникли некоторые проблемы с получением данных в отношениях «один к одному». У меня есть эта существующая таблица, и я хочу получить данные из rfp_details. вот мой код

 //rfpmain model
protected $table = 'accounting.request_for_payment';
public function rfpDetail(){
    return $this->hasOne(RfpDetail::class);
}


//rfp detail model
protected $table = 'accounting.rfp_details';
public function rfpMain(){
    return $this->belongsTo(RfpMain::class);
}

//rfp controller
public function show($id)
{
    $rfpMain = RfpMain::findOrFail($id);
    $rd = $rfpMain->rfpDetails;
    dd($rd);
}
 

ниже приведена структура моей существующей базы данных

введите описание изображения здесь

Комментарии:

1. я попытался создать модель для моей существующей базы данных. моя проблема в том, когда я устанавливаю связь между этими двумя. я не могу получить данные rfp_details. я не знаю, что я сделал не так. или не разрешается вносить красноречивый вклад в существующую базу данных?

2. На самом деле проблема typo в том, когда вы получаете доступ к отношениям. rfpDetail это ваше имя для отношений, но вы использовали rfpDetails его там, где s это не нужно.

3. да, спасибо, что заметили. у меня новая проблема, она возвращает пустое {}. я не знаю, связано ли это с моими моделями

Ответ №1:

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

Вам нужно заменить с

 public function rfpDetail(){
    return $this->hasOne(RfpDetail::class);
}
 

Для

 public function rfpDetail(){
    return $this->hasOne(RfpDetail::class,'rfpid');
}
 

Комментарии:

1. сэр, спасибо, как насчет моего восстановления в контроллере, это правильно?

2. Да, это правильно. Если мой ответ вам полезен, пожалуйста, поддержите меня и утвердите ответ, который оценит мою работу.

3. это не работает для меня, я действительно хочу поднять этот вопрос

4. попробуйте заменить с ` $rd = $rfpMain->rfpDetails; ` на ` $rd = $rfpMain->>rfpDetails(); `

5. Неправильный метод вызова, сэр. спасибо, что помогли мне