Laravel,如何从单个表单更新两个具有一对一关系的表

时间:2017-09-12 08:57:15

标签: laravel-5.1 laravel-eloquent

我有两个非常简单的模型:

Machined_Cam-2286

基本上每个剧集都有一个内容。我可以使用单个表,但我认为将这些数据集分开是有意义的。

在表格中,我想同时编辑剧集及其内容,但经过几次尝试后我还没弄清楚如何。

这就是我正在做的事情:

class Episode extends Model
{
    protected $fillable = ['number', 'language_code', 'published_at'];

    function content()
    {
        return $this->hasOne('App\EpisodeContent');
    }
}

class EpisodeContent extends Model
{
    protected $table = 'episodes_content';
    protected $fillable = ['episode_id', 'title', 'description'];

    function episode()
    {
        return $this->belongsTo('App\Episode');
    }
}

这样,episodes_content表中没有任何变化。

在另一次尝试中,我尝试了这个:

public function update(Request $request, $id)
{
    $rules = [
        'number' => 'required',
    ];
    $this->validate($request, $rules);
    $episode = Episode::with('content')->findOrFail($id);

    $episode->published_at = $request->get('published_at');
    $episode->number       = $request->get('number');
    $episode->content->title       = $request->get('title');

    $episode->update();

    return redirect('admin/episodes');
}

这样就创建了一个新的episodes_content行,而我想更新一个现有的行。

1 个答案:

答案 0 :(得分:0)

试试这个我想它会起作用

$episode = Episode::with('content',function($query) use($id){
                $query->where('episode_id',$id);
            })->where('id',$id);

这里我假设您的字段名称在父表中是id,在子表中是episode_id。如果它不起作用,请告诉我。