Projemde Ürün ve Kategori modelleri var. Ürün kategorisine aittir. Ama ne gerçekten istediğim Kategori adıyla Ürünleri sıralamak etmektirLaravel ilgili tabloya göre düzenle
$products = Product::orderBy('category_id', 'asc')->get();
, bu yüzden denedim: Ürün yabancı anahtar category_id sahip olduğundan, kolayca şöyle çıkışını sıralamak
$products = Product::with(['categories' => function($q){
$q->orderBy('name', 'asc')->first();
}]);
Ama bu çıkışlar hiçbir şey değil. Bir test olarak, return Product::with('categories')->first();
'u iade ettim ve çıktılar iyi çıktı ...
İşte Eloquent ilişkiler.
Ürün
class Product extends Model
{
protected $fillable = [
'name',
'description',
'price',
'category_id',
];
protected $hidden = [
'created_at',
'updated_at',
];
public function categories()
{
return $this->belongsTo('\App\Category', 'category_id');
}
}
Kategori:
class Category extends Model
{
protected $fillable = [
'name'
];
public function products()
{
return $this->hasMany('\App\Product');
}
}
Ve görünümü kısmı:
@foreach ($products as $product)
<tr>
<td>{!! $product->categories->name !!}</td>
<td>
@if(!empty($product->picture))
Yes
@else
No
@endif
</td>
<td>{!! $product->name !!}</td>
<td>{!! $product->description !!}</td>
<td>{!! $product->price !!}</td>
<td>
<a href="{{ url('/product/'.$product->id.'/edit') }}">
<i class="fa fa-fw fa-pencil text-warning"></i>
</a>
<a href="" data-href="{{route('product.destroyMe', $product->id)}}"
data-toggle="modal" data-target="#confirm-delete">
<i class="fa fa-fw fa-times text-danger"></i>
</a>
</td>
</tr>
@endforeach
Bu işe yaramaz. Ve mantıklı bir anlamı yok. Ürün sadece bir kategoriye sahip olabilir. İlişkileri Tinker'de test ettim ve gerektiği gibi çalışıyorlar. Modeller sorun olmamalıdır – Norgul
Ürünün yalnızca bir kategoriye sahip olması halinde, bunu çoğul kategoriler olarak adlandırmayın. Bu kafa karıştırıcı – geckob
Neden işe yaramadığını görüyorum – geckob