Laravel взаимно однозначное отношение не работает показывает только нулевое сообщение

#php #laravel #eloquent #eloquent-relationship

#php #ларавель #красноречивый #красноречивое-отношение

Вопрос:

У меня есть 2 таблицы в моей базе данных, и я попытался получить данные из них, это моя схема базы данных :

 ---------------       ---------------
|     pg      |       |   phone     |
===============       ===============
|    id       |       |    id       |
|    name     |       |    telp     |
|    address  |       |    pg_id    |
===============       ===============
 

телефонный стол принадлежит pg, у меня есть такая модель pg :

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Pg extends Model{
    protected $table = "pg";

    public function telepon(){
        return $this->hasOne('AppModelsPhone', 'pg_id', 'id');
    } 
}
 

а это моя модель телефона :

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Phone extends Model{
    protected $table = "phone";

    public function pg(){
        return $this->belongsTo('AppModelsPg', 'pg_id', 'id');
    }
}
 

Это мой код внутри контроллера для получения данных :

 $pg = Pg::find(1);
return view('inpform', ['data' => $pg]);
 

внутри моего представления я сбрасываю данные, но результат был НУЛЕВЫМ, если я изменю код на :

 $pg = Pg::all();
return view('inpform', ['data' => $pg]);
 

он показывает данные только из таблицы pg, мне нужна связь между ними.

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

1. $pg = Pg::with('telepon')->find(1); или $pg = Pg::with('telepon')->get(); laravel.com/docs/8.x/eloquent-relationships#eager-loading

2. это работает, спасибо, но могу ли я использовать это ниже laravel 8. *?

3. Это основная функция laravel с самого начала.

4. спасибо, это работает, надеюсь, вы опубликуете это как ответ, чтобы я мог установить это как правильный ответ.

Ответ №1:

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

 $pg = Pg::with('telepon')->find(1);
// or
$pg = Pg::with('telepon')->get();
 

Или, если вам всегда будут нужны эти данные, вы можете добавить их в свойство модели $with .

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Pg extends Model
{

    protected $table = "pg";

    public function telepon()
    {
        return $this->hasOne(Phone::class);
    } 

    /**
     * The relationships that should always be loaded.
     *
     * @var array
     */
    protected $with = ['telepon'];
}
 

Это приведет к тому, что связь будет загружаться каждый раз, когда вы обращаетесь к каким-либо Pg моделям.

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

1. Спасибо, я очень ценю вашу помощь. Я новичок в качестве пользователя laravel.