Отношения Laravel 5.4 - используя правильный тип - PullRequest
0 голосов
/ 22 мая 2019

У меня есть 3 таблицы: пользователи, user_addrs, заказы

В таблице заказов есть следующие поля: user_id, shipping_addr_id, billing_addr_id

В модели UserAddr у меня есть:

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

В модели заказа у меня есть:

public function userShippingAddr()
{
    return $this->belongsTo('App\UserAddr', 'shipping_addr_id');
}

public function userBillingAddr()
{
    return $this->belongsTo('App\UserAddr', 'billing_addr_id');
}

Это правильный способ сделать это или я должен использовать другой тип отношений?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я не проверял это, и я не уверен, что это 100%, что вы хотите.Но это должно дать вам хорошую отправную точку.


1.Что вы хотите?

  1. У пользователя может быть много адресов => (users) - many -> (addresses)
  2. В заказе есть один пользователь => (orders) - one -> (users)
  3. В заказе естьодин платежный адрес => (orders) - one billing -> (addresses)
  4. У заказа есть один адрес доставки => (orders) - one shipping -> (addresses)

2.Какие таблицы вам нужны?

  • пользователи

    • id
    • ...
  • заказов

    • id
    • users_id
    • billing_addresses_id
    • shipping_addresses_id
  • адреса

    • id
    • zip
    • город
    • улица
    • ...
  • address_users

    • users_id
    • address_id
    • type?(биллинг | доставка)

3.Как должны выглядеть модели?

1.У пользователя может быть много адресов => (users) - many -> (addresses)

class Users extends Model {
    // ...
    public function addresses() {
        return $this->belongsToMany('App\Models\Addresses')->withPivot('type');
    }
}

2.В заказе есть один пользователь => (orders) - one -> (users)

class Orders extends Model {
    // ...
    public function user() {
        return $this->belongsTo('App\Models\Users');
    }
}

3.У заказа есть один платежный адрес => (orders) - one billing -> (addresses)

class Orders extends Model {
    // ...
    public function billing_address() {
        return $this->belongsTo('App\Models\Addresses', 'id', 'billing_addresses_id');
    }
}

4.У заказа есть один адрес доставки => (orders) - one shipping -> (addresses)

class Orders extends Model {
    // ...
    public function shipping_address() {
        return $this->belongsTo('App\Models\Addresses', 'id', 'shipping_addresses_id_addresses_id');
    }
}
0 голосов
/ 22 мая 2019

В UserAddr первичный ключ имеет «id», чем модель, которую вы должны иметь:

В модели UserAddr вы должны иметь:

public function order()
{
    return $this->hasMany('App\Order','shipping_addr_id');
    or
    return $this->hasMany('App\Order','billing_addr_id');

}

В модели заказа вы должны иметь:

public function userShippingAddr()
{
    return $this->belongsTo('App\UserAddr', 'id','shipping_addr_id');
}

public function userBillingAddr()
{
    return $this->belongsTo('App\UserAddr', 'id', 'billing_addr_id');
}

с использованием return $this->hasMany('App\Comment', 'foreign_key', 'local_key');


читать документы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...