mgsmus wrote:Modelde relationship tanımlarken WHERE kullanabilirsiniz.
Diyelim ki 3 tane modeliniz var:
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
| Model | Tablo | Alanlar | Veri |
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
| Language | languages | code,name,direction | [tr,Türkçe,ltr] |
| | | | [en,English,ltr] |
| | | | [ar,العربية,rtl] |
| Product | products | id,name | [1, Deneme Ürün] |
| ProductDetail | product_details | id,product_id,lang,name,slug,description | [1,1,tr,Deneme Ürün, deneme-urun, Açıklama] |
| | | | [2,1,en,Test Product, test-product, Description] |
| | | | [3,1,ar,محاكمة المنتج, test-product, وصف] |
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
Product modeli içerisinde şunu yapabilirsiniz:
public function detail()
{
$lang = Session::get('lang');
return $this->hasOne('ProductDetail','product_id')->where('lang',$lang);
}
Bu durumda örneğin:
// Oturumdaki lang değerinin tanımlandığını varsayarsak, "tr" mesela
$product = Product::find(1);
echo $product->detail->name; // Deneme Ürün
// lang en ise
echo $product->detail->name; // Test Product
Hocam birde buna ekstra olarak renkler tablosu ve bu renklerinde birden fazla dilde desteği olduğunda;
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
| Model | Tablo | Alanlar | Veri |
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
| Language | languages | code,name,direction | [tr,Türkçe,ltr] |
| | | | [en,English,ltr] |
| | | | [ar,العربية,rtl] |
| Product | products | id,color_id, name | [1, 2, Deneme Ürün] |
| ProductDetail | product_details | id,product_id,lang,name,slug,description | [1,1,tr,Deneme Ürün, deneme-urun, Açıklama] |
| | | | [2,1,en,Test Product, test-product, Description] |
| | | | [3,1,ar,محاكمة المنتج, test-product, وصف] |
| Color | colors | id,code | [1, #ffffff] |
| | | | [2,#b4b4b4] |
| ColorDetail | color_details | id,color_id,lang,name | [1,2,tr,Kırmızı] |
| | | | [1,2,en,Red] |
+---------------+-----------------+------------------------------------------+--------------------------------------------------+
Aşağıdaki şekilde çıktı vermesini nasıl sağlayabilirim, ilişkiyi bir türlü kuramadım.
// Lang TR
$product = Product::find(1);
echo $product->color->name; //Kırmızı
// Lang EN
$product = Product::find(1);
echo $product->color->name; //Red
Diğer sorumda şu olacak,
function name olmadan ilişki kurmak mümkün mü, örneğin detail function olmadan name alanını çağırabiliyor muyuz? Bunun için nasıl bir yol izlemek gerekiyor.