Laravel 要数组还是不要数组?
在我的模型中,我使用以下方式获取数据:Laravel 要数组还是不要数组?,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,在我的模型中,我使用以下方式获取数据: $this->all(); 然后返回到我的控制器,该控制器生成一个视图: return View::make('myView') ->with('data', $this->myModel->getAll()); 我的问题是,最佳实践是什么,模型应该返回雄辩的对象还是数组?通过调用->toArray()?在我看来,更干净、优雅的方式总是返回一个对象 在模型中,我会这样做 class Employee extend
$this->all();
然后返回到我的控制器,该控制器生成一个视图:
return View::make('myView')
->with('data', $this->myModel->getAll());
我的问题是,最佳实践是什么,模型应该返回雄辩的对象还是数组?通过调用->toArray()?在我看来,更干净、优雅的方式总是返回一个对象 在模型中,我会这样做
class Employee extends Eloquent {
protected $table = 'employees';
}
在控制器中
public function index(){
$employees= Employee::get();
return View::make('index')->with('employees', $employees);
}
他认为:
@foreach($employees as $employee)
{{ $employee->name }}
@endforeach
在我看来,更干净、优雅的方式总是返回一个对象 在模型中,我会这样做
class Employee extends Eloquent {
protected $table = 'employees';
}
在控制器中
public function index(){
$employees= Employee::get();
return View::make('index')->with('employees', $employees);
}
他认为:
@foreach($employees as $employee)
{{ $employee->name }}
@endforeach
简单地说,这取决于您希望如何处理返回的数据。在大多数情况下,我们在视图中遍历返回的数组(使用blade),并将其附加到某个HTML列表中。我对传递给视图和单元测试的数据有一些问题。
简单地说,测试不接受对象,所以我必须显式地传递数组。简单地说,这取决于您想对返回的数据做什么。在大多数情况下,我们在视图中遍历返回的数组(使用blade),并将其附加到某个HTML列表中。我对传递给视图和单元测试的数据有一些问题。
简单地说,测试不接受对象,所以我必须明确地通过数组。简单的答案是作为对象离开。在我看来,当对象可以在视图中使用时,转换为数组似乎很愚蠢 考虑一下,如果您可能需要通过模型的关系进行foreach-使用一个数组,您要么没有这个数组,要么必须预加载它(即使您不必总是使用它),使用一个对象,您可以选择使用这个关系(如果您想用的话) 现在,我知道这与您之前关于向视图传递数组和对象的问题有关,但这是一个完全不同的问题。在这个问题中,你基本上是在说“有时我有一个对象,有时我有一个对象集合,我如何在视图中处理它”。对此,我的答案是,您必须确保视图始终看到集合(或数组或其他内容),但决不实际将对象转换为数组 在这种情况下,如果您只获得一个对象,只需在对象进入视图之前将其包装在集合(或数组)中,就可以很容易地完成标准化数据 将结果包装到集合中 有很多方法可以做到这一点,这取决于您首先是如何获取数据的。如果您正在进行自己的雄辩调用,那么最简单的解决方案是始终使用
->get()
,而不是有时使用->find()
或->first()
。如果使用->get()
,即使在期望单个结果的时候,它也会返回一个已包装在集合中的单个结果
但是,如果您提供了这个someties对象数组,那么您必须手动执行此操作。同样,这有两种不同但非常相似的技术,这取决于数据是否与Eloquent和Collection兼容,或者是否是更原始的PHP对象和数组
雄辩兼容
标准对象和数组
其实就这么简单。简单的答案是作为对象离开。在我看来,当对象可以在视图中使用时,转换为数组似乎很愚蠢 考虑一下,如果您可能需要通过模型的关系进行foreach-使用一个数组,您要么没有这个数组,要么必须预加载它(即使您不必总是使用它),使用一个对象,您可以选择使用这个关系(如果您想用的话) 现在,我知道这与您之前关于向视图传递数组和对象的问题有关,但这是一个完全不同的问题。在这个问题中,你基本上是在说“有时我有一个对象,有时我有一个对象集合,我如何在视图中处理它”。对此,我的答案是,您必须确保视图始终看到集合(或数组或其他内容),但决不实际将对象转换为数组 在这种情况下,如果您只获得一个对象,只需在对象进入视图之前将其包装在集合(或数组)中,就可以很容易地完成标准化数据 将结果包装到集合中 有很多方法可以做到这一点,这取决于您首先是如何获取数据的。如果您正在进行自己的雄辩调用,那么最简单的解决方案是始终使用
->get()
,而不是有时使用->find()
或->first()
。如果使用->get()
,即使在期望单个结果的时候,它也会返回一个已包装在集合中的单个结果
但是,如果您提供了这个someties对象数组,那么您必须手动执行此操作。同样,这有两种不同但非常相似的技术,这取决于数据是否与Eloquent和Collection兼容,或者是否是更原始的PHP对象和数组
雄辩兼容
标准对象和数组
其实就这么简单。回答得很好,这确实与另一个问题有关,我该如何在集合中包装对象?我会更新我的答案来解释,因为根据您的用例有许多不同的方法。谢谢,那么我该如何更改以下查询以获取?返回$this->with(array('looks'=>函数)($query){$query->wherePublished(1)->orderBy('sort')->take(3)->skip(0);}))->find($id,array('id',title',thumb',banner,'video'));我会这样说:
return$this->with(array('looks'=>函数($query){$query wherePublished(1)->orderBy('sort')->take(3)->skip(0);)->whereId($id)->get(array)->('id','title','thumb','banner','video');
如您所见,我已将'find'转换为whereId,并将select列放入->get()
部分。请进行明显的测试,但即使这不太正确,它也会帮助您实现目标。答案很好,它确实与另一个问题有关,我该如何包装