在Eloquent中具有一对多关系的多语言网站

时间:2014-01-25 21:38:34

标签: php laravel-4 eloquent

我在使用Eloquent设置和正确查询关系时遇到问题。我有产品,每个产品可以根据用户的区域设置有多个名称/描述/价格。现在我的问题是,当我尝试使用这种关系来更新与这些产品有关的数据时,我只能获得产品信息(库存,ID,制造日期等)或语言信息,但不能同时获得。我一直在这里,通过Eloquent文档,但实例并不是很广泛。这是我的模特:

包含语言特定信息的表的模型:

class ProductLanguage extends BaseModel {

    protected $table = 'products_lang';

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

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

产品信息的模型:

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');
    }
}

我已经尝试了L4文档页面上描述的几乎所有风格来查询这些数据,因此我有两套(产品+语言),但它根本不起作用。大多数时候我只得到语言数据,有时我会收到错误,说明发现了意外的数据,但不管我做什么,我都无法得到我想要的数据。这里有逻辑错误或我做错了什么?

更新:这是我到目前为止所尝试的查询。

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

然而,这感觉非常不明确。我也有这个能让我满意的一切:

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

棘手的部分是获取产品的语言条目以及匹配的产品信息。我想我会试试这个:

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

我仍然试图围绕这整个雄辩的事情。感谢您一直以来的帮助。

1 个答案:

答案 0 :(得分: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;