Ich habe ein Produkt Modell, das mit Product und ProductOptionValues angeschlossen werden muss Modelle.Laravel Umfang Abfrage mit verschachtelten belongsTo Beziehungen
Die Produkte :: getAll() sollte mit einem JSON zurückgegeben werden, die eine verschachtelte Ansicht der Optionen enthält, die mit dem Produkt verbunden sind, mit den in der Produktoption verbunden Werte Produktoption, auf diese Weise:
products: [
{
id: 1,
name: "product 1",
...
...
options: [
{
id: 1,
name: "option 1",
is_visible: 1,
description: "desc",
values: [
{
id: 1,
name: "option value 1",
sku: "test 1",
description: "desc 1",
unitary_price: 5.5
},
{
id: 2,
name: "option value 2",
sku: "test 2",
description: "desc 2",
unitary_price: 5.5
}
]
},
...
{
id: 20,
name: "option 20",
is_visible: 0,
description: "desc 2",
values: [
{
id: 30,
name: "option value 30",
sku: "test 30",
description: "desc 30",
unitary_price: 35.5
},
{
id: 40,
name: "option value 40",
sku: "test 40",
description: "desc 40",
unitary_price: 45.5
}
]
}
]
}
Also, ich habe zwei verschiedene Tabellen erstellt (Produkttabelle erstellen Migration entfällt)
Produktoptionen Tisch
Schema::create('product_options', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('slug');
$table->text('description');
$table->boolean('is_visible')->index()->default(0);
$table->integer('product_id')->unsigned()->index();
$table->timestamps();
$table->softDeletes();
});
Produkt-Wahl-Werte Tabelle
Schema::create('product_option_values', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('sku');
$table->text('description');
$table->boolean('is_default_value')->index()->default(0);
$table->integer('product_option_id')->unsigned()->index();
$table->integer('product_id')->unsigned()->index();
$table->decimal('unitary_price', 10, 2);
$table->timestamps();
$table->softDeletes();
});
Produkt-Wahl Modell:
class ProductOption extends Model {
use SoftDeletes;
use SluggableTrait;
protected $dates = ['deleted_at'];
protected $guarded = ['id', 'created_at', 'updated_at'];
protected $sluggable = [
'build_from' => 'name',
'save_to' => 'slug',
'include_trashed' => true
];
public function product() {
return $this->belongsTo(Product::class);
}
public function productOptionValues() {
return $this->hasMany(ProductOptionValue::class);
}
...
...
}
Produkt-Wahl-Wert Modell:
class ProductOptionValue extends Model {
use SoftDeletes;
use SluggableTrait;
protected $dates = ['deleted_at'];
protected $guarded = ['id', 'created_at', 'updated_at'];
public function product() {
return $this->belongsTo(Product::class);
}
public function productOption() {
return $this->belongsTo(ProductOption::class);
}
...
...
}
Produkt Modell:
class Product extends Model implements SluggableInterface {
use SoftDeletes;
use SluggableTrait;
protected $dates = ['deleted_at'];
protected $guarded = ['id', 'created_at', 'updated_at'];
protected $sluggable = [
'build_from' => 'name',
'save_to' => 'slug',
'include_trashed' => true
];
...
...
public function productOptions() {
return $this->hasMany(ProductOption::class);
}
public function productOptionValues() {
return $this->hasMany(ProductOptionValue::class);
}
}
Frage ist, wie kann ich ein Produktobjekt erhalten, die in den JSON-Daten, auch die Option Wert verschachtelt in die „Optionen“ Schlüssel des Produkts enthält? Ich bin schon mit dem scopeWithCompleteData Methode in die Produkte Modell, das von den JSON-API-Handler aufgerufen wird, kann aber nicht verstehen, wie man Nest & Filter die Werte der Optionen und Optionswert einen JSON-Array darstellen wie der, der am Anfang der Frage steht.