如何使用Laravel雄辩地将数据存储在多个表中

时间:2019-04-09 10:08:34

标签: php laravel eloquent

我的模块具有多种媒体。我想用雄辩的方式将数据存储在三个表中。我的表如下

用户,DrivingSession,媒体 ,DrivingSession模型包含user_id,而Media模型包含drive_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);
}

我想将user_id存储在DrivingSessions表和附加的Media to Medias表中以供参考。我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果每个驾驶会话只有1个用户,则应该是BelongsTo关系。

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

假设您已经使用user_id设置了数据库表,那么您应该可以运行

$user->drivingsessions()->save($driving_session);

这将自动在Drivingsession中填充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');
])