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 自定义方法的主要内容,如果未能解决你的问题,请参考以下文章

laravel5.4自定义公共函数的创建

laravel 4 自定义命名密码列

如何在 laravel 库中添加自定义方法

Laravel Vuejs 实战:开发知乎 (33)自定义helper方法

laravel 自定义常量方法

在没有类依赖的自定义类/子系统中使用 Laravel 4 模型