php - Laravel 多对多查询 Controller

标签 php laravel api http

所以我有一个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/

相关文章:

php - 自动完成文本框下拉列表未出现在文本框下方

php - 即使有正确的路线,Laravel '404 not found' 错误?

php - 试图在 MySQL 中保存 PHP 函数的结果

php - 当我在 Laravel 5.8 中使用连接查询时返回重复数据

php - Laravel session 将标签转换为 html 实体

firebase - Firestore 模拟器 REST API 身份验证

php - 带有不记名身份验证的 Yii2 rest api

javascript - 如何通过单击屏幕上的表格列来弹出图像

php - HTML 标签中的三元运算符 - Laravel 5.6 Blade 模板

api - 使用 Postman 和 Jetpack 测试 API 速率限制