gpt4 book ai didi

php - Laravel( Eloquent )表 ||等效的

转载 作者:可可西里 更新时间:2023-11-01 12:19:12 26 4
gpt4 key购买 nike

Propel 使用 Peer 类,而 doctrine 使用 Table 类来操作相应的对象和对象属性,而不必用 static 污染实际对象 方法。

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

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

-- 更新 1 --

如何使用 Doctrine 表类的外行示例:

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'));
}

Doctrine 表类的目的是为不应该在 Controller 中的各个对象的操作提供一个 api,在上面的示例中,linkFoo 类将提供的 foo 链接到各个用户对象。

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

最佳答案

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

Controller

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 类将处理验证。

命令

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;
}
}

}

关于php - Laravel( Eloquent )表 ||等效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com