检索数据后,Laravel修改模型

时间:2014-03-07 14:06:07

标签: php object orm laravel

我不想在调用它时修改对象,我正在看电话,修改会自动完成。

在控制器中,我有以下内容:

$candidate = Candidate::where('slug', '=', $slug)->first();

然后我这样做:

if (!is_null($candidate->social_profiles) && !empty($candidate->social_profiles)) {
    $candidate->social_profiles = unserialize($candidate->social_profiles);

    foreach ($candidate->social_profiles as $key => $value) {
        $candidate->{$key} = $value;
    }

    $candidate->social_profiles = null;
}

现在,我正在寻找一种方法,在最后一部分,在自己的Candidate模型中,这样每当检索到一个候选者时,它就会执行上面的代码,这样我就不必复制了上面的最后一部分,无论我在哪里找到候选人。

问题是,我不知道该怎么做。 $this中的__construct仅包含类中定义的数据,这基本上是一个空模型。还有什么?

1 个答案:

答案 0 :(得分:0)

这可能是个人品味,但我会创建一个CandidateRespository类,它有一个方法findBySlug(或者你想称之为的任何方法):

public function findBySlug($slug)
{
    $candidate = Candidate::where('slug', '=', $slug)->first();

    if (!is_null($candidate->social_profiles) && !empty($candidate->social_profiles)) {
        $candidate->social_profiles = unserialize($candidate->social_profiles);

        foreach ($candidate->social_profiles as $key => $value) {
            $candidate->{$key} = $value;
        }

        $candidate->social_profiles = null;
    }

    return $candidate;
}

使用依赖注入将存储库传递到控制器,然后使用:

调用它
$candidate = $this->candidate->findBySlug($slug);

此处还有更多内容:http://laravel.com/docs/ioc& http://culttt.com/2013/07/08/creating-flexible-controllers-in-laravel-4-using-repositories/

希望有所帮助。