写了个方法如下,不知道为啥, 最后返回的$apps
的所有项的is_allow
属性都是 1,也就是说 if 判断 in_array 全为 false
public function apps()
{
$apps = App::all();
$myApp = \Auth::user()->apps;
$diffApp = $apps->diff($myApp);
foreach ( $apps as &$app )
{
if ( in_array($app, (array)$diffApp) )
{
$app->is_allow = 0;
} else {
$app->is_allow = 1;
}
}
return $apps;
}
foreach
处理前的$apps
[{
"id": 1,
"name": "应用 1"
}, {
"id": 2,
"name": "应用 2"
}, {
"id": 3,
"name": "应用 3"
}]
$diffApp
的内容
[{
"id": 1,
"name": "应用 1"
}]
foreach
处理后的$apps
[{
"id": 1,
"name": "应用 1",
"is_allow": 1
}, {
"id": 2,
"name": "应用 2",
"is_allow": 1
}, {
"id": 3,
"name": "应用 3",
"is_allow": 1
}]
1
feiyuanqiu 2018-04-02 10:18:14 +08:00
把你的 diff 实现贴出来啊...
|
2
InternetExplorer 2018-04-02 10:22:57 +08:00
你的 is_array 写两个参数真的不报错吗
|
3
imn1 2018-04-02 10:26:05 +08:00
in_array 的顺序是不是搞错了?
|
4
b821025551b 2018-04-02 10:26:57 +08:00
in_array 里面,$app 是一个 object,(array)$diffApp 是一个二维数组包的 object,能一样可就出鬼了。
|
5
imn1 2018-04-02 10:28:36 +08:00
回上一条,我眼花了,好像是我搞错了
|
6
InternetExplorer 2018-04-02 10:34:44 +08:00
我...看花了,没睡醒
|
7
Vogan 2018-04-02 10:36:13 +08:00
The in_array function cannot compare objects.
|
8
xuyl OP @feiyuanqiu diff 方法是 laravel 自带的...
|
9
InternetExplorer 2018-04-02 10:37:40 +08:00
从代码来看,应该是 laravel,$apps 应该是一个 App model 的数组,那么 foreach 循环里的 $app 应该是个对象,in_array 在比较的时候可以认为是 == 比较,所以两个 object 是不会相等的,都是返回的 false
可以考虑取出 $apps 的所有 id 来比较 |
10
InternetExplorer 2018-04-02 12:55:20 +08:00
我可能又说错了......
(array)$diffApp) 得到的东西你 dd 出来看一下就知道为什么了。 我补觉去了(~﹃~)~zZ |
11
HYSS 2018-04-02 12:58:09 +08:00
又黑我 PHP
|
12
wanghanlin 2018-04-02 13:22:41 +08:00
```
return App::select('apps.*', DB::raw('IF(app_user.id IS NULL, false, true) as is_allow')) ->leftJoin('app_user', function($query){ return $query->on('app_user.app_id', 'apps.id') ->where('user_id', auth()->id()) ->orWhereNull('user_id'); }) ->get() ``` |
13
wanghanlin 2018-04-02 13:28:22 +08:00
格式没了,不过 SQL 能做的还是不用放 php 里面吧。
|
14
vincenttone 2018-04-02 14:51:40 +08:00
看起来是 in_array(Array1, Array2)了,估计楼主的 Array2 是个两层的数组,数组没法这样比较。
|