laravel Pulk 5.2的工作原理与5.1不同

laravel Pulk 5.2的工作原理与5.1不同,laravel,laravel-5.2,Laravel,Laravel 5.2,下面的代码是在5.1中运行的,它是延迟加载的。但现在它尝试在集合上调用load方法 $campaigns = Campaign::all(); $campaigns->pluck('brand')->load('logo'); 错误 5.1具有错误的关系错误 in Builder.php line 2071 at Builder->__call('logo1', array()) at Builder->logo1() at call_user_func_array(a

下面的代码是在5.1中运行的,它是延迟加载的。但现在它尝试在集合上调用load方法

$campaigns = Campaign::all();
$campaigns->pluck('brand')->load('logo');
错误

5.1具有错误的关系错误

in Builder.php line 2071
at Builder->__call('logo1', array())
at Builder->logo1()
at call_user_func_array(array(object(Builder), 'logo1'), array()) in Builder.php line 943
at Builder->__call('logo1', array())
at Builder->logo1()
at call_user_func_array(array(object(Builder), 'logo1'), array()) in Model.php line 3483
at Model->__call('logo1', array()) in Builder.php line 477
at Brand->logo1() in Builder.php line 477
at Builder->Illuminate\Database\Eloquent\{closure}()
at call_user_func(object(Closure)) in Relation.php line 171
at Relation::noConstraints(object(Closure)) in Builder.php line 478
at Builder->getRelation('logo1') in Builder.php line 449
at Builder->loadRelation(array(object(Brand), object(Brand), object(Brand), object(Brand), object(Brand), object(Brand), object(Brand)), 'logo1', object(Closure)) in Builder.php line 429
at Builder->eagerLoadRelations(array(object(Brand), object(Brand), object(Brand), object(Brand), object(Brand), object(Brand), object(Brand))) in Collection.php line 44
at Collection->load('logo1') in HomeController.php line 82
找出它是illumb\Database\elount\Collection,现在是illumb\Support\Collection

$campaigns = Campaign::all();
$campaigns->pluck('brand')->load('logo');

如何将其转换为Eloquent?

在一个新的Eloquent集合中使用Pull result,它再次工作。我希望有更好的解决办法

    $b = new \Illuminate\Database\Eloquent\Collection($campaigns->pluck('brand'));
    $b->load('logo');

您应该查看介绍说明中声明的Laravel文档

注意:虽然大多数雄辩的集合方法返回雄辩集合的新实例,但Pull、keys、zip、collapse、flatten和flip方法返回基本集合实例

雄辩的集合只是illumb\Support\Collection的扩展。在Eloquent集合中,构造函数不会被重写,因此,检查基本控制器构造函数时,我们可以假设您可以使用此类类型/实例创建Eloquent集合(或新的基本集合):

  • 排列
  • 集合(自身实例)
  • 可排列的(实例)
  • Jsonable(实例)
  • JsonSerializable(的实例)
您可以将Collection类的uu构造方法检查到供应商文件夹中的laravel\framework\light\Support\Collection.php中,然后搜索调用到构造函数中的getArrayableItems方法

在我看来,从“基本”集合创建一个有说服力的集合是毫无用处的,因为您将丢失对数据库的引用,并且您将无法再直接使用该结果集。事实上,您不会有一个id或任何主键来识别数据库中的精确行(除非您采集的数据是主键)。无论如何,您可以在构造函数中通过“base”集合来实例一个新的雄辩集合:

$baseCollection = new \Illuminate\Support\Collection();
$eloquentCollection = new \Illuminate\Database\Eloquent\Collection($baseCollection);
此外,使用Campaign::all()可以从表中获取所有列。你为什么不干脆

Campaign::with('logo')->get(['id', 'brand']);

延迟加载将对集合中的每个元素进行查询。相反,快速加载将以非常快的方式执行,只需少量查询即可提供所需的所有数据。

感谢您的详细解释。Campaign::all()仅用于演示。而标志不是运动的参考,它属于品牌。看来发起一个新的eloguent系列是最好的选择。