【问题标题】:Migrating from FuelPHP to Laravel: problem with one response从 FuelPHP 迁移到 Laravel:一个响应的问题
【发布时间】:2019-02-21 19:48:55
【问题描述】:

我正在将一个旧项目从燃料迁移到 laravel,但我在响应其中一个请求时遇到了问题。问题是,我需要来自 laravel 的响应与在燃料中的响应完全相同,因为我已经在 iOS 和 Android 中拥有该应用程序,并且具有相同的响应意味着我只需要更改端点。我似乎无法在此处复制响应:

  • FuelPHP 代码和响应:

        $belongs = Model_Belong::find('all',array(
            'where'=>array(
                array('id_user',$id_user),
            ),
        ));
    
    return $this->createResponse(200, 'List', $belongs);
    *****RESPONSE****
    {
    "code": 200,
    "message": "List",
    "data": {
        "[1][1]": {
            "id_user": 1,
            "id_group": 1
        },
        "[1][2]": {
            "id_user": 1,
            "id_group": 2
        },
        "[1][3]": {
            "id_user": 1,
            "id_group": 3
        }
    }
    }
    
  • Laravel 代码和响应:

        $belongs = Belong::where('id_user', $id_user)
                    ->get();
    
    return $this->createResponse(200, 'List', $belongs);
    *****RESPONSE*****
    {
    "code": 200,
    "message": "List",
    "data": [
        {
            "id_user": 1,
            "id_group": 1,
        },
        {
            "id_user": 1,
            "id_group": 2,
        },
        {
            "id_user": 1,
            "id_group": 3,
        }
    ]
    }
    

***编辑:createResponse() 方法

    function createResponse($code, $message, $data = [])
{
    if ($data == null) {
       $data = (object)[];
    }
    return response()->json([
        'code' => $code,
        'message' => $message,
        'data' => $data
    ]);

}

【问题讨论】:

  • 这个 createResponse() 有什么作用,因为这不是标准的 Fuel 方法?而Model_Belong,是标准模型,还是ORM模型?
  • createResponse 是我创建的用于处理响应的方法(对于燃料和 laravel 相同)这是代码:(在问题中编辑)并且 Model_Belong 是 ORM。
  • @MiguelHeredia 如果createResponse 方法相同,那么燃料中的$belongs 数据是什么样的?
  • 如果我只是 var_dump 不属于我的方法,它会给出这个:fuel:pastebin.com/Bvs1zqrzlaravel:pastebin.com/cfpmWVRG
  • 这是一个 ORM get() 的结果,所以它是一个 Model_Belong 对象的数组。因此我的问题是该方法对它做了什么,因为水合 ORM 对象并没有给出这样的结果。

标签: php laravel-5 eloquent laravel-query-builder fuelphp


【解决方案1】:

我认为可以通过 sql 生成自己的密钥并使用 KeyBy() 检索它来完成一个 hacky 解决方案,如下所示:

Belong::select([
        'id_user',
        'id_group', 
        DB::raw("CONCAT('[', id_user, '][', id_group, ']') as mykey")
    ])
    ->where('id_user', $id_user)
    ->get()
    ->keyBy('mykey');

【讨论】:

  • 或循环生成密钥:
  • $result = Belong::where('id_user', $id_user) ->get(); foreach ($result as $row) { $belongs["[$row->id_user][$row->id_group]"] = $row; }
  • 我得到 stripos() 期望参数 1 是字符串,用你的代码给出的对象!
  • 似乎与您在应用程序中使用结果的方式有关。在 keyBy() 之后添加 ->toArray() 可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2013-11-13
  • 2016-12-24
  • 2017-07-14
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 2019-06-01
相关资源
最近更新 更多