我正在尝试返回给定用户参与的所有主题。
终结点接受一个userId,并假定返回一个线程模型集合。
然而,在执行控制器操作时,我一直收到这个错误。它正在寻找一个message_id
列,但我没有在thread
表或任何表上定义它--这是一个奇怪的错误。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'thread.message_id' in 'where
clause' (SQL: select * from `thread` where `thread`.`message_id` = 2 and
`thread`.`message_id` is not null)"
我相信我链接表的方式可能有问题,但我不完全确定。我假设message
表的thread_id
列应该引用thread
表的id
列,这就是我在下面的message
迁移中所做的。
我做错了什么?我该如何解决?
以下是用户迁移:
Schema::create('users', function (Blueprint $table) {
$table->id('id');
$table->string('email')->unique();
$table->string('full_name');
$table->string('password');
});
以下是线程迁移:
Schema::create('thread', function (Blueprint $table) {
$table->id();
$table->string('title');
});
以下是邮件迁移:
Schema::create('message', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('thread_id');
$table->string('body');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('thread_id')
->references('id')
->on('thread')
->onDelete('cascade');
});
控制器操作:
public function getUserThreads($userId) {
$userParticipatedThreads = Message::findOrFail($userId);
return $userParticipatedThreads->thread;
}
消息模型:
public function thread() {
return $this->hasMany(Thread::class);
}
端点:
[GET] http://127.0.0.1:8000/api/getUserThreads/2
Route::get('getUserThreads/{userId}', [ThreadController::class, 'getUserThreads']);
2条答案
按热度按时间siotufzp1#
Message类上的
thread
关系正在查找message_id
,因为这是hasMany关系的默认工作方式。但是,由于看起来该消息属于一个线程(每个消息都有一个thread_id),因此实际上需要的是
belongsTo
r7xajy2e2#
回答问题;
为什么在尝试返回基于用户ID的集合模型时出现“找不到列”错误?
因为您的
thread
表没有定义message_id
字段。一个
Message
属于一个Thread
,但是你似乎把这种关系颠倒了。在
Thread
模型上,定义与Message
模型的关系:然后,您可以按用户查询某些消息的存在性: