我有News和NewsCategories模型,我已经使用关系选项生成了CRUD。
我现在需要为新闻模型生成一个选择列表,以选择它所属的NewsCategory。
我知道如何在模型中执行此操作,但不知道如何使用存储库模式执行此操作。
我无法在文档中看到任何示例,因此我们将不胜感激。
由于
NewsRepository
/**
* Configure the Model
**/
public function model()
{
return News::class;
}
新闻模式
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
**/
public function newsCategory()
{
return $this->belongsTo(NewsCategory::class);
}
新闻控制器
/**
* Show the form for creating a new News.
*
* @return Response
*/
public function create()
{
return view('news.create');
}
/**
* Store a newly created News in storage.
*
* @param CreateNewsRequest $request
*
* @return Response
*/
public function store(CreateNewsRequest $request)
{
$input = $request->all();
$news = $this->newsRepository->create($input);
Flash::success('News saved successfully.');
return redirect(route('news.index'));
}
答案 0 :(得分:0)
如果您的存储库扩展InfyOm\Generator\Common\BaseRepository。存储库应该自己更新模型关系。只需使用正确的密钥将关系值与其他输入一起传递。
但是,对于删除和阅读(让我们称之为操作),您需要查询数据。
您可以使用存储库方法,范围查询或条件类来执行此操作。 (并调用这些过滤器)。
存储库方法:
// inside your controller
// some repository filtering method
$this->repository->whereHas('newsGroup', function($query){...});
$this->repository->hidden(['field_to_hide']);
...
// some action: delete, all or findWhere...
$this->repository->delete();
范围查询是回调,它在模型上应用了一些查询并返回它。(与接受并返回Database \ Eloquent \ Builder的Eloquent范围不同)
$this->repository->scopeQuery(
function ($model){ return $model->where(...);
});
Or your
// some action: delete, update or findWhere...
$this->repository->delete();
标准方式:您将创建一个负责查询的类。对于简单的用例来说,这是一种过度杀伤。
// inside the controller
$this->repository->pushCriteria(new NewsBelongingToCategory ($group_id));
// App\Criteria\NewsBelongingToCategory.php
class NewsBelongingToCategory implements CriteriaInterface {
private $group_id;
public function __construct($group_id){
$this->group_id = $group_id;
}
public function apply($model, NewsRepositoryInterface $repository)
{
$group_id = $this->group_id;
$model = $model->whereHas('newsCategory',
function ($query) use ($group_id){
$query->where('group_id', '=', $group_id);
});
return $model;
}
}
// in your controller
$this->repository->delete();
请注意,某些操作会忽略特定的过滤器。例如,delete(id)
和update($attributes, $id)
不使用条件,另一方面lists($column, $key)
不使用范围。