我有以下关系:
折扣:
<?php
class Discount extends Eloquent {
protected $table = 'discount';
public $timestamps = true;
public function title()
{
return $this->hasOne('Translation', 'labelId', 'titleLabelId')->where('languageId', T::getLang())->first()['phrase'];
}
public function titles()
{
return $this->hasMany('Translation', 'labelId', 'titleLabelId');
}
}
?>
翻译:
<?php
class Translation extends Eloquent {
protected $table = 'translations';
public $timestamps = false;
protected $fillable = array('phrase', 'languageId', 'labelId');
public function language()
{
return $this->belongsTo('Language', 'languageId');
}
public function label()
{
return $this->belongsTo('Label', 'labelId');
}
}
?>
标签:
<?php
class Label extends Eloquent {
protected $table = 'label';
public $timestamps = false;
protected $fillable = array('key');
public function translations()
{
return $this->hasMany('Translation', 'labelId', 'id');
}
}
?>
有三个数据库表,其中包含以下列:
折扣:
id | titleLabelId
翻译:
id | languageId | labelId
标签:
ID
问题:我想创建一个标题(翻译)并将其与折扣相关联。这是我尝试过的:
$discount = new Discount;
/*create a new label*/
$labelKey = Label::max('key') + 1;
$label = new Label(array('key' => $labelKey));
$label->save();
/*create a new title (and associate it with the label)*/
$title = new Translation(
array(
'phrase' => $input['title'],
'languageId' => 3,
'labelId' => $label->id
));
$title->save();
$discount->save();
$discount->titles()->save($title);
显然,$discount->titles()->save($title);
部分不起作用。如果手动执行,标题仅附加到折扣:$discount->titleLabelId = $label->id
。有没有办法使用ORM来做到这一点?
答案 0 :(得分:1)
当尝试通过Eloquent中定义的关系将一个模型与另一个模型相关联时,您应该使用associate()
方法而不是save()
方法。
$discount->titles()->associate($title);
在此之前,您应该确保对任何已更改或新的内容调用save()
方法。
答案 1 :(得分:1)
在您的折扣模型中,您是否已将关系设置为使用正确的表和外键?
class Discount extends Eloquent
{
public function titles()
{
return $this->belongsTo('Translation', 'translations', 'titleLabelId');
}
}