hasOne如何保证只有一条记录
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
use Authenticatable, CanResetPassword, SoftDeletes;
public function wallet()
{
return $this->hasOne('App\Models\Wallet');
}
}
用户有且只能有一个钱包,以下是开通钱包接口的实现:
public function create(WalletPostRequest $request)
{
...
$user = JWTAuth::parseToken()->authenticate();
if (!count($user->wallet)) {
$password = Hash::make(trim($request->input('password')));
$wallet = new Wallet(['password' => $password,
'balance' => 0,
'unconfirmed' => 0]);
$user->wallet()->save($wallet);
}
...
}
暂时的实现是这样的,但是感觉还是有问题。因为同一用户如果在两个客户端上登录,并且同时调用该接口可能会创建两个wallet记录。因为代码并非线程安全,数据库也没有加锁。请问可以有什么办法通过表锁,或者行锁,或者线程锁来保证钱包只有一个吗?求最佳解决方案。
1 个回复
oz
赞同来自: