Laravel更新hasMany关系

时间:2019-05-02 17:35:18

标签: laravel

我刚刚阅读了更多文档和有关此问题的问题来解决该问题,但是对我来说却无济于事,我有2个具有此模型的表:

labels = np.array(['0', '1-10', '11-20', '21-30', '31-40', '41+'])
ge_lbl = np.array(['GE50', 'LT50'])

u, d = np.unique(df.D.values, return_inverse=True)
bins = np.array([1, 11, 21, 31, 41]).searchsorted(df.B)
ltge = (df.C.values >= 50).astype(int)

shape = (len(u), len(labels), len(ge_lbl))
out = np.zeros(shape, int)
np.add.at(out, (d, bins, ltge), 1)

pd.concat({
    d_: pd.DataFrame(o, labels, ge_lbl)
    for d_, o in zip(u, out)
}, names=['Cx', 'D'], axis=1).plot.bar()

我可以使用此示例代码保存一些与关系船相关的数据,并且可以正常工作:

class Month extends Model
{
    protected $guarded = ['id'];

    public function lessons()
    {
        return $this->hasMany(Lesson::class);
    }
}

class Lesson extends Model
{
    protected $guarded = ['id'];

    public function months()
    {
        return $this->belongsTo(Month::class);
    }
}

现在,我尝试使用以下代码更新一些课程字段:

$month = Month::find(1);

$lesson = new Lesson();
$lesson->title = $request->title;
$lesson->content = $request->content;
$lesson->file_url = $uploadedFilePath;
$lesson->filename = $filename;
$lesson->time = $request->time;

$month = $month->lessons()->save($lesson);

我尝试使用例如$lesson = Lesson::find($id); $lesson->update([ 'title' => $request->title, 'content' => $request->content, 'file_url' => $uploadedFilePath, 'filename' => $filename, 'time' => $request->time ]); $month = Month::find($request->months['0']); $lesson = Lesson::find($lesson->id); $lesson->months()->associate($month)->save(); 的值来更改数据库month_id表中的Lesson列,我该怎么做?

已更新

$month->id

控制器:

class Lesson extends Model
{
    protected $guarded = ['id'];

    public function month()
    {
        return $this->belongsTo(Month::class);
    }
}

迁移:

$lesson->update([
    'title' => $request->title,
    'content' => $request->content,
    'file_url' => $uploadedFilePath,
    'filename' => $filename,
    'time' => $request->time
]);

$month = Month::find($request->months['0']);
$lesson = Lesson::find($lesson->id);

$lesson->month()->associate($month)->save();
$lesson->update(['month_id' => $month->id]);

1 个答案:

答案 0 :(得分:0)

首先,方法months()的名称应重命名为month,因为它返回的是一个月而不是几个月。

第二,如果您的Lesson有一个名为month_id的字段,那么它比您想的要简单得多。我们可以更改这两行:

$lesson = Lesson::find($lesson->id);
$lesson->months()->associate($month)->save();

到以下行:

$lesson->update(['month_id' => $month->id);

它应该将您的month_id的{​​{1}}更新为$lesson