我有两张桌子
类别字段
媒体字段
我想要做的是,每当我创建新类别时,在上传缩略图和横幅之后,将在媒体表中为它们创建新记录,并且这些记录的ID将针对特定类别存储。
每种媒体只属于一个类别,一个类别只有两个媒体。
类别中的缩略图和横幅广告将存储来自媒体的媒体ID。
这是我的代码
$category = Category::create($input);
$media = Media::create([
'title' => $photoName,
'source' => $photoName,
]);
$类别 - >媒体 - >附加($媒体 - > ID);
类别模型
public function media()
{
return $this->belongsTo('App\Media');
}
媒体模型
public function category()
{
return $this->belongsTo('App\Category');
}
任何人都可以帮助我解决我在这里做错的事情
理解的,
答案 0 :(得分:0)
我希望你需要检查你的表,因为这两个表都没有关系。如果您这样做,那么您的代码将起作用
您应该在laravel 5.4中使用这些表模式
Schema::create('Category', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('description')->nullable();
$table->string('thumbnail')->nullable();
$table->string('banner')->nullable();
$table->timestamps();
});
// Create table for associating roles to users (Many-to-Many)
Schema::create('Media', function (Blueprint $table) {
$table->integer('id')->unsigned();
$table->integer('category_id')->unsigned();
$table->string('title')->nullable();
$table->string('source')->nullable();
$table->foreign('category_id')->references('id')->on('Category')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['id', 'category_id']);
});
答案 1 :(得分:0)
您应该将外键添加到“类别”字段中:
id,media_id,name,description,thumbnail,banner
现在你可以使用relatioship:
$category = Category::findOrFail(1); // get category with id = 1
$media = Media::create([
'title' => $photoName,
'source' => $photoName,
]);
$category->media()->associate($media);
了解更多信息: https://laravel.com/docs/5.5/eloquent-relationships#one-to-one