小编caf*_*nso的帖子

Laravel - 在多对多关系中选择特定列

我在Laravel 4.2 Web应用程序中有两个模型,UserGroup.用户可以是许多组的成员,组可以有许多成员.因此,两种模型都具有多对多关系:

<?php
    class User extends Eloquent {
        public function groups()
        {
            return $this->belongsToMany('Group');
        }
    }

    class Group extends Eloquent {
        public function users()
        {
            return $this->belongsToMany('User');
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

我的一个API资源是/groups,列出了应用中可用的所有群组:

<?php
    $groups = Group::with('users')->all();
?>
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是在JSON响应中,每个用户都包含users表中的所有字段(当然不包括$hidden属性中的那些字段).我希望这种关系只返回一组特定的字段而不是整个表.

在其他关系类型中,我可以使用以下语句轻松实现此功能(现在假设用户可能只属于一个组):

<?php
    public function users()
    {
        return $this->hasMany('User')->select(['id', 'first_name', 'last_name']);
    }
?>
Run Code Online (Sandbox Code Playgroud)

然而,上述似乎并不适用于多对多关系.我遇到了这个问题,显然是指同一个问题,看起来这在Laravel 4.1中是不可能的.所选答案的作者tptcat提供了一个关于Laravel的Github问题跟踪器上的问题的链接,但该链接不再有效,我无法确定此问题是否仍在4.2中打开.

有没有人遇到这个并成功设法解决它?

php relationship laravel

9
推荐指数
1
解决办法
2692
查看次数

Laravel 5集成测试中的多个HTTP请求

我们正在Laravel 4中开发我们的项目.我们的一个集成测试对同一个控制器执行两个连续的HTTP请求:

public function testFetchingPaginatedEntities() {
    $response = $this->call('GET', "foos?page=1&page_size=1");
    // assertions

    $response = $this->call('GET', "foos");
    // some more assertions
}
Run Code Online (Sandbox Code Playgroud)

如您所见,第二个请求不携带任何查询字符串参数.然而,我们注意到,我们的控制器被接收page,并page_size在这两个请求.

我们能够通过在调用之间重新启动测试客户端来解决这个问题(如Laravel 4控制器测试中所述 - 在过多$ this-> call()之后出现ErrorException - 为什么?):

public function testFetchingPaginatedEntities() {
    $response = $this->call('GET', "foos?page=1&page_size=1");
    // assertions

    $this->client->restart();

    $response = $this->call('GET', "foos");
    // some more assertions
}
Run Code Online (Sandbox Code Playgroud)

我们现在正在考虑将我们的项目移植到Laravel 5,但是$this->client由于L5不再使用,它看起来不再适用于测试Illuminate\Foundation\Testing\Client.

有人可以提供重置测试客户端的替代方案吗?或者也许是一种避免重启它的方法?

php integration-testing laravel-5

5
推荐指数
1
解决办法
1316
查看次数

带会话/ cookie的CORS请求

我的应用程序有一个PHP服务器和一个客户端(一个JS单页面应用程序).它们是单独的项目,并部署在不同的域中.客户端使用服务器公开的RESTful API.

此应用程序将与处理身份验证的第三方集成,因此用户无法直接登录.我们的服务器只接收一个SSO令牌(经过适当签名,以便我们验证其完整性).

我们还在传输层为所有请求强制执行安全性.

我想做的是,一旦验证了SSO令牌,就启动我自己的会话,然后将用户重定向到客户端.我认为一旦创建了会话,浏览器就会在异步API调用中自动发送正确的Cookie标头,但似乎并非如此.

这是故意因安全原因而被禁用吗?

php cookies session cors

5
推荐指数
1
解决办法
3873
查看次数