2016-09-07 60 views
0

我想获得传递到另一个模型查询ID的数组列表。雄辩的返回非关联数组?

$companies = $user->companies->pluck('id'); 

但它一直返回一个关联数组这样:

[ 0 => 2, 1 => 9] 

所以,当我把它传递给find方法对我公司的模式,这样

$company = Company::find($companies); 

我得到的以下错误:

Trying to get property of non-object 

我需要能够给非关联数组传递到像这样的电话:

Company::find([2,9]); 

回答

1

正如你可以在Laravels源代码看到

src/Illuminate/Database/Eloquent/Builder.php

public function find($id, $columns = ['*']) 
{ 
    if (is_array($id)) { 
     return $this->findMany($id, $columns); 
    } 
    $this->query->where($this->model->getQualifiedKeyName(), '=', $id); 
    return $this->first($columns); 
} 

find()将内部调用findMany()如果第一个参数是一个数组。但是$user->companies->pluck('id')返回一个CollectionBuilder创建一个错误的查询。所以,你的选择是:

使用findMany()

$company = Company::findMany($companies); 

转换集合到一个数组:

$company = Company::find($companies->toArray()); 

使用whereIn()

$company = Company::whereIn('id', $companies)->get(); 

但实际上,所有的不似乎有任何意义,因为$user->companies可能会被读取y包含要从数据库中获取的集合。所以,你也可以这样写:

$company = $user->companies; 

但是 - 您使用的是单数命名(公司)的一组公司的事实,让我觉得,你想实现的东西完全不同。

0

您可以用其中的方法尝试

Company::whereIn('id', $companies)->get();

1

试一下:

$companies = $user->companies->pluck('id')->toArray(); 

刚做了一个修补程序测试,结果是一个平面阵列,“发现”将肯定工作!