В моем массиве есть только один элемент из сводной таблицы

avatar
David Dubois
8 августа 2021 в 19:01
55
1
0

С этим кодом :

$evenements = Year::with(['evenements' => function($query) {
    return $query->orderBy('mnemonique');
}])
    ->orderBy('id')
    ->get();

Я понял:

5 => array:7 [▼
    "id" => 62
    "name" => "Congé"
    "mnemonique" => "Congé"
    "color" => "#bcbcbc"
    "created_at" => "2021-07-13T14:16:04.000000Z"
    "updated_at" => null
    "pivot" => array:2 [▼
        "year_id" => 1
        "evenement_id" => 62 

Проблема в том, что сводка должна иметь 10 элементов, а не только 2, потому что событие 62 произойдет через 5 лет

Table Years

Table evenements

5 records and not only 1

Это код модели:

Модель событий:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Evenement extends Model
{
    protected $fillable = ['name','mnemonique','color'];

    //DD 18/07/21 Une année peut avoir plusieurs events 
    public function years()
    {
        return $this->belongsToMany(Year::class, 'evenement_year', 'evenement_id', 'year_id'); 
    }
}

Год модели:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Year extends Model
{
    protected $fillable = ['name'];

    public function evenements()
    {
        return $this->belongsToMany(Evenement::class, 'evenement_year', 'year_id', 'evenement_id');
    }
}

Это содержимое $query :

    Illuminate\Database\Eloquent\Relations\BelongsToMany {#260 ▼
  #table: "evenement_year"
  #foreignPivotKey: "year_id"
  #relatedPivotKey: "evenement_id"
  #parentKey: "id"
  #relatedKey: "id"
  #relationName: "evenements"
  #pivotColumns: []
  #pivotWheres: []
  #pivotWhereIns: []
  #pivotWhereNulls: []
  #pivotValues: []
  +withTimestamps: false
  #pivotCreatedAt: null
  #pivotUpdatedAt: null
  #using: null
  #accessor: "pivot"
  #query: Illuminate\Database\Eloquent\Builder {#1478 ▶}
  #parent: App\Year {#1474 ▶}
  #related: App\Evenement {#1475 ▶}
}

Я не знаю, как заполнить сводной массив? Есть идеи?

Заранее спасибо.

Источник
matiaslauriti
8 августа 2021 в 19:41
1

Покажите нам полное изображение базы данных, а не некоторые строки, так как мы не можем видеть имена столбцов...

David Dubois
9 августа 2021 в 06:37
0

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

Ответы (1)

avatar
Mohsen Nazari
8 августа 2021 в 23:50
1

Вы должны указать дополнительные столбцы в ваших отношениях, используя withPivot; так как я не знаю ваших имен столбцов (обрезано на изображении), я просто приведу пример:

class Year extends Model
{
    protected $fillable = ['name'];

    public function evenements()
    {
        return $this->belongsToMany(Evenement::class, 'evenement_year', 'year_id', 'evenement_id')
            ->withPivot(["someField1", "someFiled2"]);
    }
}
David Dubois
9 августа 2021 в 07:04
0

Спасибо за ваш ответ. Я редактирую свой вопрос и добавляю несколько фотографий своих столов. Как видите, все поля взяты из трех таблиц (включенных в сводную таблицу как внешний ключ).

David Dubois
9 августа 2021 в 07:13
0

Это не дополнительные столбцы, а только поля из трех моих таблиц.

David Dubois
9 августа 2021 в 10:38
0

Я пытался применить ваш ответ, но у меня все еще есть только 2 пункта для одной записи.