laravel - как получить имя через главную таблицу? - PullRequest
1 голос
/ 28 февраля 2020

У меня есть три модели:

User
Order
UserInfo

В модели пользователя:

  /* Attribute to set primary user */
    protected $primaryKey = 'user_id';

     public function userInfo()
        {
            return $this->hasOne('App\Models\Users\UserInfo', 'user_id');
        }

      public function orders()
        {

            return $this->hasMany('App\Models\Orders\Order', 'user_id');
        }

В модели заказов:

// Set table
protected $table = 'orders';

// Set timestamps
public $timestamps = true;

// Set primary key
protected $primaryKey = 'order_id';

// Set mass assignable columns
protected $fillable = [];

// Manys orders can belong to one user

public function user()
{
    return $this->belongsTo('App\Models\Users\User', 'user_id');
}

В модели UserInfo:

 // Set table
    protected $table = 'user_infos';

    // Set timestamps
    public $timestamps = true;

    // Set primary key
    protected $primaryKey = 'user_id';

    // Set mass assignable columns
    protected $fillable = [];




    /**
     * Get the user info associated with the user.
     */

    public function user()
    {

        return $this->belongsTo('App\Models\Users\User', 'user_id');
    }

В каждой их таблице есть общий столбец с именем user_id, в который я буду обращаться через модель заказа с идентификатором пользователя, чтобы сопоставить его с моделью пользователя и получить имя из информации о пользователе.

Я пытался получить его с помощью Order::all()->user->userInfo->name->get(), но там написано Exception with message 'Property [user] does not exist on this collection instance.'

Что я сделал не так?

1 Ответ

1 голос
/ 28 февраля 2020

Вы пытаетесь извлечь отношение пользователя в коллекцию заказов.

Это может быть достигнуто из экземпляра модели вместо коллекции, например:

$user = Order::first()->user;

Если вы хотите отобразить всех пользователей заказов, вы можете l oop через заказы и получить пользователь:

foreach($orders as $order){
    $user = $order->user;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...