【发布时间】:2021-10-29 09:23:23
【问题描述】:
当我尝试播种我的数据库时,你好我的 foreach 循环返回一个Call to a member function bookmarkItems() on int。我不明白我缺少什么laravel docs poly relation 我已经设置了这样的关系,然后当我尝试保存新的bookmarkitem 时返回错误。 stack overflow post about saving 我试过 save 或 attach 但都返回相同的错误我没有看到我在代码中缺少什么。
编辑:
看到Post::all()->random()->id 应该是Post::all()->random() 后,它返回此错误
SQLSTATE[HY000]: General error: 1364 Field 'bookmarks_id' doesn't have a
default value (SQL: insert into `bookmark_items` (`bookmark_items_id`,
`bookmark_items_type`) values (5, App\Models\Post))
附加或保存新书签项时,它没有添加$bookmarkItems->bookmarks_id = Bookmark::all()->random()->id; 是什么意思,因为在将新书签项保存到数据库之前进行设置时,它没有将其插入数据库中?
迁移
Schema::create('bookmark_items', function (Blueprint $table) {
$table->id();
$table->integer('bookmark_items_id')->unsigned();
$table->string('bookmark_items_type');
$table->unsignedBigInteger('bookmarks_id');
$table->foreign('bookmarks_id')->references('id')->on('bookmarks');
$table->timestamps();
});
类
class Post extends Model
{
public function bookmarkItems()
{
return $this->morphToMany(BookmarkItems::class, 'bookmark_items');
}
}
class Comment extends Model
{
public function bookmarkItems()
{
return $this->morphToMany(BookmarkItems::class, 'bookmark_items');
}
}
class BookmarkItems extends Model
{
public function posts(): \Illuminate\Database\Eloquent\Relations\MorphToMany
{
return $this->morphedByMany(Post::class, 'bookmark_items');
}
public function comments(): \Illuminate\Database\Eloquent\Relations\MorphToMany
{
return $this->morphedByMany(Comment::class, 'bookmark_items');
}
}
Foreach 函数
foreach ((range(1, 6)) as $index) {
$post = Post::all()->random()->id;
$bookmarkItems = new BookmarkItems();
$bookmarkItems->bookmarks_id = Bookmark::all()->random()->id;
$post->bookmarkItems()->save($bookmarkItems);
}
【问题讨论】:
-
$post = Post::all()->random()->id;您只是将 ID 分配给$post,而不是实际的帖子本身 -
啊,是的,我看到了(哎呀),但现在我得到了一个不同的错误`一般错误:1364 字段'bookmarks_id'没有默认值`由于某种原因我更新了它没有添加
$bookmarkItems->bookmarks_id = Bookmark::all()->random()->id;问题 -
您确定错误来自那段代码吗?它试图插入
bookmark_items_id和bookmark_items_type,您没有在显示的代码中指定 -
不是来自bookmarks_id,但我发现问题不适发布遮阳篷
标签: php laravel many-to-many