Laravel Отношение Составной первичный ключ - PullRequest
1 голос
/ 12 апреля 2020

Как определить отношение в Laravel с использованием составных ключей?

У меня есть 2 таблицы, которые имеют 2 первичных ключа, порядок [id_order, id_trip] и подробный порядок [id_trip, id_seat].

Я пытался получить $ order-> detail_order-> id_seat в index.blade. php, но ошибка Преобразование массива в строку (Вид: D: \ xampp \ htdocs \ travel \ resources \ views \ order \ index.blade. php)

Мне кажется, я ошибся в определении отношений в модели. Вот мой код:

Order. php

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Traits\CompositeKeyTrait;

class Order extends Model{

    use CompositeKeyTrait;
    protected $table = "order";
    protected $fillable = [
        'id_order',
        'id_trip', 
        'id_users_customer', 
        'date_order',
        'id_users_operator'
    ];

    protected $primaryKey = ['id_order', 'id_trip'];

    public function detail_order(){   
        return $this->hasMany(Detail_Order::class);   
    }
}

Detail_Order. php

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Traits\CompositeKeyTrait;

class Detail_Order extends Model{
    use CompositeKeyTrait;

    protected $table = "detail_order";
    protected $fillable = [
        'id_trip',  
        'id_seat',
        'id_users_feeder', 
        'id_order',
        etc
    ];

    protected $primaryKey = ['id_trip', 'id_seat'];

    public function order(){
        return $this->belongsTo(Order::class, 'id_order', 'id_trip');
    }
}

index.blade. php

     @foreach($order as $o)
        <tr>
            <td>{{ $o->detail_order->id_seat }}</td>
        </tr>
     @endforeach

У кого-нибудь есть идеи? Благодаря.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы не можете. Eloquent не поддерживает составные первичные ключи. Но вы можете сделать это с помощью пакета с открытым исходным кодом LaravelTreats .

Надеюсь, это поможет вам

Ссылка: { ссылка }

0 голосов
/ 12 апреля 2020

Laravel не поддерживает Составной первичный ключ . Вы нажали "Преобразование массива в строку" из-за Laravel попытки преобразовать массив в строку.

protected $primaryKey = ['id_order', 'id_trip'];
...