Приведенный выше код генерируется следующим образом:
$post = Post::findOrFail($postId);
echo "category id: " . $post->category->id."<br />";
echo "category name: ". $post->category->name;
dd($post);
exit;
Почтовая модель :
class Post extends Model
{
protected $table = 'posts';
public function category() {
return $this->hasOne(Category::class, 'id');
}
}
Модель категории :
class Category extends Model
{
protected $table = 'categories';
}
Миграция и заполнение базы данных прошло успешно, однако после обновления записи Post
значение внешнего ключа не изменилось.
Миграция :
public function up()
{
Schema::create('posts', function (Blueprint $t) {
$t->bigIncrements('id');
$t->timestamps();
$t->unsignedBigInteger('category_id');
$t->foreign('category_id')
->references('id')->on('categories')
->onDelete('cascade');
$t->string('title', 255);
$t->string('description', 255);
});
}
Обновление записи :
$post_id = $data->post_id;
$category_id = $data->category_id;
$title = $data->title;
$description = $data->description;
$post = Post::where('id', $post_id)->first();
$post->category_id = $category_id;
$post->title = $title;
$post->description = $description;
$post->save();
Я проверил базу данных, запись обновлена (даже внешний ключ), однако после получения $post->category->id
возвращает мне старое значение.
Вот скриншот из базы данных:
Обновление Похоже, что при печати $post->category->id
вместо идентификатора категории отображается идентификатор сообщения.