@dodiş#27938
products
public function up()
{
$table->id();
$table->string('name');
//...
}
product_images
public function up()
{
$table->id();
$table->foreignId('product_id')->constrained('products');
$table->boolean('cover')->default(false);
$table->string('file');
//...
}
app/Models/Product.php
public function images(): HasMany
{
return $this->hasMany(ProductImage::class);
}
public function coverImage(): HasOne
{
return $this->hasOne(ProductImage::class)
->ofMany('cover', 'max')
->withDefault();
}
app/Models/ProductImage.php
public function product(): BelongsTo
{
return $this->belongsTo(Product::class);
}
Örnek:
$product = Product::find(1);
// Normal resim ekleme
$product
->images()
->create([
'file' => $request->file('file')->store('images'),
]);
// Kapak resmi ekleme
$product
->images()
->create([
'file' => $request->file('cover')->store('images'),
'cover' => true,
]);
/** @var \App\Models\ProductImage[] $images Ürünün tüm resimleri */
$images = $product->images;
/** @var \App\Models\ProductImage[] $images Ürünün kapak resmi hariç tüm resimleri */
$images = $product
->images()
->where('cover', false)
->get();
/** @var \App\Models\ProductImage $cover Ürünün kapak resmi */
$cover = $product->coverImage;
$images = $product
->images()
->where('cover', false)
->get();
@foreach($images as $image)
<img src="{{ Storage::url($image->file) }}" alt/>
@endif
<img src="{{ Storage::url($product->coverImage->file) }}" alt/>
https://laravel.com/docs/8.x/eloquent-relationships
https://laravel.com/docs/8.x/filesystem#storing-files
https://laravel.com/docs/8.x/requests#files