Ошибка красноречивого отношения Laravel - вызов неопределенного отношения - PullRequest
0 голосов
/ 17 октября 2019

У меня есть две таблицы schools и subscriptions. Я уже получил school_id из моего subscriptions стола. Моя проблема, когда я хочу получить столбец description из таблицы schools. Я получаю сообщение об ошибке Call to undefined relationship [description] on model [App\Subscription]. Может кто-нибудь сказать мне, в чем проблема моих кодов? Я уже определил отношения в моих моделях и в миграции. Я не хочу использовать построитель запросов, потому что это слишком запутанно. Спасибо.

Модель школы


class School extends Model
{

    protected $fillable = ['description'];

    public function user(){
        return $this->hasMany('App\User');
    }


    public function subscriber()
    {
        return $this->belongsTo('App\Subscription','description');
    }
}

Модель подписки

class Subscription extends Model
{

    protected $fillable = [
        'id', 'school_id', 'start_date', 'end_date',
    ];

    public function subscriptions(){
        return $this->hasMany('App\School','description');
    }

    public function plans(){
        return $this->belongsTo('App\Plan');
    }
}

Мой контроллер

 $subs = Subscription::findOrFail($id)->with('description')
                                  ->get();    
            $plans = Plan::get();
            dd($subs);

PS. Когда я только ставлю $subs = Subscription::findOrFail($id);, я получаю эти данные в dd

 #attributes: array:8 [▼
    "id" => 2
    "school_id" => 2
    "start_date" => "2019-09-27"
    "end_date" => "2019-10-27"
    "created_at" => "2019-10-17 03:36:13"
    "updated_at" => "2019-10-17 03:36:13"
    "plan_id" => 2
    "status" => 1
  ]

Таблице школ

| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name         | varchar(191)     | NO   | UNI | NULL    |                |
| description  | text             | NO   |     | NULL    |                |
| logo         | varchar(191)     | YES  |     | NULL    |                |
| main_server  | varchar(191)     | YES  |     | NULL    |                |
| local_server | varchar(191)     | YES  |     | NULL    |                |
| status       | int(11)          | NO   |     | 1       |                |
| updated_by   | varchar(191)     | YES  |     | NULL    |                |
| created_at   | timestamp        | YES  |     | NULL    |                |
| updated_at   | timestamp        | YES  |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+

Подписки

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| school_id  | int(10) unsigned | NO   | MUL | NULL    |                |
| start_date | date             | YES  |     | NULL    |                |
| end_date   | date             | YES  |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
| plan_id    | int(10) unsigned | NO   | MUL | NULL    |                |
| status     | int(11)          | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

РЕДАКТИРОВАТЬ: Я просто хочу получить description от school_id, который я получаю от $subs

Ответы [ 2 ]

1 голос
/ 17 октября 2019

В модели подписки измените функцию отношения подписок

public function subscriptions(){
        return $this->hasMany('App\School', 'id', 'school_id');
    }

вызовите красноречивый запрос на

$subs = Subscription::with('subscriptions')->findOrFail($id);
dd($subs->subscriptions[0]->description);
1 голос
/ 17 октября 2019

Вы называете неправильное отношение. Вы определили subscriptions, а не description отношение в вашем Subscription Model.

Может быть, это опечатка?

Вы можете изменить свои отношения на:

public function description(){
    return $this->hasMany('App\School','id', 'school_id');
}

, а затем просто назвать это как:

$subs = Subscription::with('description')->findOrFail($id);    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...