2014-01-25 4 views
0

Eloquent를 사용하여 관계를 설정하고 올바르게 쿼리하는 데 문제가 있습니다. 제품이 있고 각 제품은 사용자의 지역에 따라 여러 개의 이름/설명/가격을 가질 수 있습니다. 이제 내 문제는이 관계를 사용하여 이러한 제품에 관련된 데이터를 업데이트하려고 할 때 제품 정보 (주식, ID, 제조일 등) 또는 언어 정보 만 가져올 수 있지만 동시에 둘 다 가져올 수 없다는 것입니다. 저는 영원히, 묵시적인 문서를 살펴 보았습니다. 그러나 그 예들은 매우 광범위하지 않습니다. 여기 내 모델은 다음과 같습니다 나는 거의 L4에 설명 된 모든 맛을 시도Eloquent에서 일대 다 관계가있는 다국어 사이트

class Product extends Eloquent { 

protected $fillable = array('category_id', 'availability', 'image', 'year', 'stock'); 

    public static $rules = array(
    'category_id'=>'required|integer', 
    'title'=>'required|min:2', 
    'description'=>'required|min:20', 
    'price'=>'required|numeric', 
      'year'=>'required|integer', 
    'availability'=>'integer', 
    'image'=>'required|image|mimes:jpeg,jpg,bmp,png,gif' 
); 

public function category() { 
    return $this->belongsTo('Category'); 
} 

    public function productlanguage(){ 
     return $this->hasMany('ProductLanguage'); 
    } 
} 

: 제품 정보

class ProductLanguage extends BaseModel { 

    protected $table = 'products_lang'; 

    protected $fillable = array('title','description','price','language'); 

    public function product(){ 
     return $this->belongsTo('Product'); 
    } 
} 

모델 : 테이블에 대한

모델이 언어 특정 정보를 보유 설명서 페이지에서이 데이터를 쿼리하므로 두 세트 (제품 + 언어)가 있지만 작동하지 않습니다. 대개의 경우 언어 데이터 만 가져오고 때로는 예기치 않은 데이터가 발견되었다는 오류가 발생하지만 내가하는 일과 관계없이 원하는 데이터를 얻을 수 없습니다. 여기에 논리 오류가 있습니까? 아니면 내가 뭘 잘못하고 있습니까?

업데이트 : 여기까지 시도한 쿼리가 있습니다.

$product = Product::find($id)->productlanguage()->first(); 

그러나 이것은 매우 특이하지 않다고 느낍니다. 나에게도 모든 것을 가져다주는이 제품이 있습니다.

$products = Product::with('productlanguage')->get(); 

까다로운 부분은 제품의 언어 항목과 일치하는 제품 정보를 얻는 것입니다. 나는 이것을 시도 할 것이라고 생각한다 :

$products = ProductLanguage::with('product')->find($id); 

나는이 전체적인 겉만 그르르른 일로 나의 머리를 싸려고 아직도 노력하고있다. 지금까지 도와 줘서 고마워.

+1

어떻게 당신이 그것을 쿼리하는

그의 productlanguage을 모두 가진 제품을 얻으려면? –

+0

클래스가 잘 정의 된 것 같습니다. 컨트롤러에서 모델을 어떻게 쿼리하고 있습니까? – edi9999

답변

1

정확히 원하는 대상에 따라 다릅니다.

//This retrieves one product by id, and loads simultaneously the productlanguages 
$product=Product::with('productlanguage')->find($id); 

//This retrieves only the productlanguages as an Array 
$productlanguages=$product->productlanguage; 

또는 다른 방법으로 주위 :

$productLanguage=ProductLanguage::with('product')->find($id); 
$product=$productLanguage->product; 
+0

이것은 꽤 멋지 긴하지만 나는 다른 방법으로 그것을 원한다. 내가 속한 제품에 특정 언어 항목을로드해야합니다. – Flobbo

+0

답변을 업데이트했습니다. 작동해야한다고 생각합니다. – edi9999

+0

쿨! hehe, 방금 내 질문을 업데이 트했습니다. 고맙습니다. 나는 이것을 시도 할 것이다. 내가 찾고있는 $ id는 제품 ID가 아닌 productlanguage 테이블의 ID라고 가정합니다. 어떻게 작동합니까? – Flobbo

관련 문제