Laravel 4 自定义方法
Posted
技术标签:
【中文标题】Laravel 4 自定义方法【英文标题】:Laravel 4 custom method 【发布时间】:2015-09-13 16:33:09 【问题描述】:我有两个表路径和标记(一条路径可以有多个标记)。我想使用 trails 表中的自定义方法从两者返回数据。
类似这样的:
public function RetrieveMarker()
return Marker::where("relation_id","=", $this->id);
但是如何从控制器调用这个方法呢?
我想返回一个包含多个路径的 json 对象及其相关标记,如下所示:
[id: 1, trail: a trail, markers: [id: a marker, id: another marker],
id: 2, trail: trail 2, markers: [id: yam, id: yaam]]
并且想做这样的事情:
return $this->trail
->orderBy('title', 'ASC')
->where('region_id', $region_id)
->RetriveMarkers()
->get();
但我得到了一个Illumination/bad/query异常。
我尝试了几种使用范围的变体,但认为这并不难,我只是不知道方法!
顺便说一句,我使用的是 Laravel 4,路径和标记之间没有直接关系,因为标记与多个表多态相关,我不想将“$this->belongsTo”样式用作自定义这里肯定需要方法。
提前致谢。
【问题讨论】:
【参考方案1】:您需要在您的情况下定义两个模型,Trail 和 Marker。您的 Trail 类将如下所示,(为了这个示例,我省略了其他一些项目);
class Trail extends Eloquent
protected $table = 'trails';
public function markers()
return $this->hasMany('Marker');
您的 Marker 模型将是一个基本的 Eloquent 模型对象;
class Marker extends Eloquent
protected $table = 'markers';
现在要为所有已加载标记的路径创建查询,您可以使用 Eloquent 的即时加载功能;
$trailsWithMarkers = $this->trail
->with('markers')
->orderBy('title', 'ASC')
->where('region_id', $region_id)
->get();
这里的秘诀是->with('markers')
,它指示 Eloquent 执行连接并加载与每个跟踪对象关联的所有标记。
最后返回 JSON 在 Laravel 中非常简单。该查询末尾的 get 方法返回一个 Laravel 理解的集合,并且可以像这样简单地为您序列化;
return Response::json($trailsWithMarkers);
我建议你阅读一下Eloquent handles relationships 的方法。
【讨论】:
感谢您的回复。问题是 Trails 和 Markers 之间的关系是多态的,这种方法对此不起作用。 对不起,错过了关于它是多态的说明。多阅读一下这对你有帮助吗***.com/questions/26727088/…?以上是关于Laravel 4 自定义方法的主要内容,如果未能解决你的问题,请参考以下文章