如何使用Laravel Eloquent在多个表中存储数据

3

我有一个包含多媒体的模块。我想使用eloquent在三个表中存储数据。我的表如下:

用户,驾驶会话,媒体。驾驶会话模型包含user_id,媒体模型包含driving_session_id。我想将特定用户创建的DrivingSession图像/视频存储在Media模型内。我的模型函数如下:

Users.php

public function drivingsessions(){
    return $this->hasmany(DrivingSession::class);
}

DrivingSession.php

public function user(){
    return $this->belongsToMany(User::class);
}

public function Medias(){
     return $this->hasMany(Media::class);
}

Media.php

public function drivingSession(){
    return $this->belongsToMany(DrivingSession::class);
}

我想在DrivingSessions表中存储user_id以供参考,并将附加的Media存储到Medias表中。我该如何做?


belongsToMany 拼写错误 - RiggsFolly
我已经编辑过了。 - Muhammad
你可以使用attach()。 - Chandni Soni
1个回答

1
如果每个驾驶会话只有一个用户,则应该是属于关系。
public function user()
{
 return $this->belongsTo(User::class);
}

假设您已经设置了带有user_id的数据库表,那么您应该能够运行。
$user->drivingsessions()->save($driving_session);

这将自动填充驾驶会话中的user_id列。

在媒体上您需要做类似的事情,我认为您更可能想使用belongsTo而不是belongsToMany;

$driving_session->medias()->save($media);

如果您正在创建资源,则可以使用以下内容。
$driving_session = $user->drivingsessions()->create([
    'title' => $request->input('title'),
]);

然后您可以使用捕获的资源来更新媒体。
$driving_session->medias()->create([
    'media' => $request->input('media');
])

$user = User::find(1); $drvsess = new DrivingSession(); $drvess->title = $request->title; $user->drivingSession()->save($drvess);$media = new Media(); $drvsess->media()->save($request->media); - Muhammad
是的,但如果媒体来自上传,则您首先必须处理文件;如果它是链接,则应该可以像那样工作。此外,如果正在创建,则有一个快捷方式,我将修改我的答案。 - ColinMD
没问题@Muhammed,请别忘记将答案标记为正确。 - ColinMD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接