【问题标题】:How to store data in multiple tables using Laravel eloquent如何使用 Laravel eloquent 将数据存储在多个表中
【发布时间】:2019-04-09 10:08:33
【问题描述】:

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

用户、DrivingSession、媒体 ,DrivingSession 模型包含 user_id,Media 模型包含driving_session_id。我想在 Media 模型中存储特定用户创建的 DrivingSession 图像/视频。我的模型函数是。

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);
}

媒体.php

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

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

【问题讨论】:

  • ?? blongsToMany ??拼写错误
  • 我已经编辑了这个。
  • 你可以使用 attach()

标签: php laravel eloquent


【解决方案1】:

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

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 = 用户::find(1); $drvsess = new DrivingeSession(); $drvess->title = $request->title; $user->drivingSession()->save($drvess); $媒体=新媒体(); $drvsess->media()->save($request->media);是这样的吗???
  • 是的,但是如果媒体来自上传,那么您必须首先处理文件,如果它是链接,那么它应该像这样工作。另外,如果创建那么有一条捷径,我会修改我的答案。
  • 没问题@Muhammed,别忘了将答案标记为正确。
猜你喜欢
  • 2019-04-07
  • 1970-01-01
  • 2016-05-09
  • 2021-01-12
  • 1970-01-01
  • 2015-12-07
  • 2021-07-17
  • 2016-06-30
  • 2019-12-01
相关资源
最近更新 更多