php - 如何直接在对象上附加关系?
问题描述
我不知道我是否正确地提出了这个问题,但无论如何。
因此,当我在控制器上使用“store”方法时,我会在同一个请求中发送两个字段“name”和“fr”。在我的控制器中,我希望能够创建我的模型(房间)并将其关系附加到它(房间翻译)。当我尝试以下代码时,它告诉我我没有提供 room_id。有没有自动的方法来实现这一点?
public function store(RoomRequest $request)
{
$request = $request->validated();
$room = new Room;
$room->create($request);
$room->translations()->create($request);
return success('');
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class RoomTranslation extends Model
{
protected $fillable = ['fr', 'room_id'];
public function room() {
return $this->belongsTo('App\Room');
}
}
<?php
namespace App;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
use App\RoomTranslation;
class Room extends Model
{
protected $fillable = ['name'];
public function categories() {
return $this->hasMany('App\Category');
}
public function translations() {
return $this->hasOne('App\RoomTranslation');
}
}
谢谢您的帮助 !
PS:如果有更简洁的方法来编写我的这部分代码,我将很高兴听到我如何改进它。
谢谢 !
解决方案
你可以这样做:
Room::create($request->only(['name']))->translations()->create($request->only(['fr']));
只需查找拼写错误或输入名称是否正确。
同样在 Room 模型类翻译关系中,如果每个 Room 有多种语言应该是hasMany,如果每个 Room 没有很多翻译,则可以添加翻译语言列。
推荐阅读
- python - 在保持原始索引的同时对列表进行排序的最佳方法是什么?
- java - 使用键绑定移动对象的问题
- javascript - 子组件- 渲染子组件 - vue 测试工具
- python - 使用具有范围函数的变量?
- r - R 不允许写入文档,cpp_pdf_select 中的错误(输入、输出、页面、密码)
- windows - Docker - 无法复制到非目录:/var/lib/docker/overlay2/xw77p2bxfkhhnwqs5umpl7cbi/merged/app/.git
- python - 为什么 plt.text 在我绘制时不显示文本框?
- python - 优化 Tensorflow 中的其他参数(除了权重和偏差)
- python - 尝试显示 json 数据时出现 json.decoder.JSONDecodeError
- gpu - 使用 GPU 设置 Kaggle 环境