Laravel (Eloquent) Table ||同等学历

Laravel (Eloquent) Table || Peer equivalent

Propel 使用 Peer classes,而 doctrine 使用 Table classes 作为一种操作各个对象和对象属性的方式,而不必污染实际具有 static 方法的对象。

粗略浏览 laravel (eloquent) 文档后,我没有看到 eloquent 为相同的 Peer 或 [=16= 提供的任何内容] 喜欢的功能。我的问题是,laravel(或 eloquent)是否为此类 class 提供命名空间,还是我只使用 Table 并让自动加载器处理其余部分?

// Example use of a table class in doctrine 1.2
$user = UserTable::getInstance()->findById(1);

--更新一--

如何使用学说 table class 的外行示例:

class UserTable
{
    public static function getInstance()
    {
        return Doctrine_Core::getTable('User');
    }

    public function linkFoo($userId, array $foos)
    {
        $user = $this->findById($userId);

        foreach ($foos as $foo) {

            $user->foo = $foo;

            $user->save();
        }
    }
}

// SomeController.php
executeSaveFoo()
{
    UserTable::getInstance()->linkFoo($this->getUser(), array('foo1', 'foo2'));
}

原则 table class 的目的是为针对不应在控制器中的各个对象的操作提供 api,在上面的示例中 linkFoo class 将 link 向相应的用户对象提供 foo。

我觉得对象和 'table' classes 之间的分离很重要,因为对象不应该知道如何实例化或水化自己。

如前所述,完成任务的方法不止一种,但这里有一个使用命令的简单示例。

控制器

namespace App\Http\Controllers;

//...
use App\Http\Requests\UpdateUserRequest;
use App\Commands\UpdateUser;
use App\User;
//...

class UserController extends Controller {

/**
 * Update the specified resource in storage.
 *
 * @param  int  $id
 * @return Response
 */
public function update(UpdateUserRequest $request, $id)
{
    //gather request data
    $data = $request->all();

    //retrieve user
    $user= User::findOrFail($id);

    //update user
    $updateUser = \Bus::dispatch(
                        new UpdateUser($user, $data)
                     );

    //check if update was successful
    if($updateUser)
    {
        //update successful
        return redirect('/route/here')->with('message', 'User updated successfully');
    }
    else
    {
        //else redirect back with error message
        return redirect()->back()->with('error', 'Error updating user');
    } 
}
}

UpdateUserRequest class 将处理验证。

命令

namespace App\Commands;

use App\Commands\Command;

use Illuminate\Contracts\Bus\SelfHandling;

class UpdateUser extends Command implements SelfHandling {

    protected $user, $data;

    /**
     * Create a new command instance.
     */
    public function __construct($user, $data)
    {
        $this->user= $user;
        $this->data = $data;
    }

    /**
     * Execute the command.
     */
    public function handle()
    {
        //assign first name
        $this->user->first_name = $this->data['first_name'];

        //assign last name
        $this->user->last_name = $this->data['last_name'];

        //assign email address
        $this->user->email = $this->data['email'];

        //update user
        if($this->user->update())
        {
            //updated successfully, return true
            return true;
        }
        else
        {
            //else return false
            return false;
        } 
    }

}