所以我有一个films
表和一个conversations
表以及一个数据透视表film_conversation
电影(电影
)
'id'
'filmable_id',
'filmable_type',
对话(对话
)
'id'
'last_message_id'
FilmConversation (film_conversation
)
'film_id'
'conversation_id'
我想创建一个 GET
请求来抓取属于该特定电影的所有对话,我有这个查询,但不确定我是否正确抓取它以及我将如何编写正在发生的内容在响应中返回?
对话 Controller :
/**
*
*/
public function conversations()
{
$this->user = Auth::user();
$film = Film::whereHas('conversations', function ($query) {
return $query->where('id');
})->get();
return $film;
}
我还有一个问题,您应该直接将此查询包含到请求方法中,还是将其拆分为私有(private)方法并将其包含在内以增加调用的可读性和困惑程度?最好的做法是什么?这是我为前端公开的一个端点。
最佳答案
首先,您没有使用经过身份验证的用户,其次,您返回的是包含任何对话的电影集合,查询约束没有执行任何操作,您只需访问 $film->conversations
获取集合
public function conversations($id)
{
// Get all conversations for a specified film
return Film::find($id)->conversations;
// Get all conversations in all films that have a conversation
$films = Film::whereHas('conversations')->with('conversations')->get();
$conversations = $films->flatMap->conversations;
return $conversations;
}
希望这有帮助
关于php - Laravel 多对多查询 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58693127/