表category、category_description和descriptions是相关的:
public function descriptions(): BelongsToMany
{
return $this->belongsToMany(Description::class);
}public function categories(): BelongsTo {
return $this->belongsTo(Category::class);
}
public function descriptions(): BelongsTo {
return $this->belongsTo(Description::class);
}public function descriptions(): BelongsToMany
{
return $this->belongsToMany(Category::class);
}分别在模型中。保存或更新时:
public function createOrUpdate(Category $category, Request $request)
{
$category->fill($request->get('category'))->save();
$category->descriptions()->syncWithoutDetaching(
$request->input('category.descriptions', [])
);
}一个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'description' in 'field list' (SQL: insert into `category_description` (`category_id`, `description`, `description_id`, `is_active`, `meta-description`, `meta-h1`, `meta-keyword`, `meta-title`, `name`, `slug`) values (1, 41231231, 0, 1, 23, 124, 12, 12, 12333312, 74))也许我错过了什么,因为没有太多的经验。
更新:
一个类别可以有多个条目,但说明只有一个父项。重写-一对多(多态):
public function descriptions()
{
return $this->morphMany(Description::class, 'descriptable');
}public function descriptable()
{
return $this->morphTo();
}保存一条记录没有问题,但是如何同时更新多条记录呢?
发布于 2021-05-29 23:17:02
怎么样?
// Category Model.
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function descriptions()
{
return $this->belongsToMany(Description::class)
->using(CategoryDescription::class);
}
}// Description Model.
use Illuminate\Database\Eloquent\Model;
class Description extends Model
{
protected $fillable = [
"name",
"description",
"meta-title",
"meta-description",
"meta-keyword",
"meta-h1",
"slug",
"is_active",
];
public function categories()
{
return $this->belongsToMany(Category::class)
->using(CategoryDescription::class);
}
}// Intermediate Model.
use Illuminate\Database\Eloquent\Relations\Pivot;
class CategoryDescription extends Pivot
{
protected $table = "category_description";
public $incrementing = true;
public function category()
{
return $this->belongsTo(Category::class, "category_id", "id");
}
public function description()
{
return $this->belongsTo(Description::class, "description_id", "id");
}
}// createOrUpdate method.
public function createOrUpdate(Category $category, Request $request)
{
$category->fill($request->get('category'))->save();
$description = Description::create(
Arr::collapse($request->input('category.descriptions', []))
);
$category->descriptions()->syncWithoutDetaching(
$description->id
);
}备注:
尽管这可能对你很有效,但我个人认为你在这里没有多对多的关系。我相信一对多的关系就足够了。
发布于 2021-05-29 23:56:10
问题是您发送的数据要插入到找不到的列中
您应该只发送需要插入到表中的数据
因此,在您的示例中,您应该将函数编写为
$category->descriptions()->syncWithoutDetaching($description_id); // the id of the description you want to attach with this category如果您在数据库中仍然没有描述,并且您正在使用相同的请求创建它,那么您可以这样做
Description::create(['columnName'=>$request->get('columnName'),'columnName2'=>$request->get('columnName2')])->idhttps://stackoverflow.com/questions/67752557
复制相似问题