Php 拉雷维尔:拯救一段属于自己的关系
我想在签名表中保存新签名。 每个签名可以链接到多个用户。 我在用户和签名之间有一个多对多表 我的签名是:Php 拉雷维尔:拯救一段属于自己的关系,php,laravel,laravel-5,Php,Laravel,Laravel 5,我想在签名表中保存新签名。 每个签名可以链接到多个用户。 我在用户和签名之间有一个多对多表 我的签名是: class Signature extends Model { public $fillable = ['name', 'template']; public function users() { return $this->belongsToMany('App\User'); } } 我的控制器SigantureController.php是: p
class Signature extends Model {
public $fillable = ['name', 'template'];
public function users() {
return $this->belongsToMany('App\User');
}
}
我的控制器SigantureController.php是:
public function store(CreateSignaturesRequest $request)
{
//return $user_id;
$values = $request->only(['name','template']);
Signature::create($values));
return response()->json(['message'=>'SUCCESS'], 201);
}
如何创建签名并将其链接到用户
我试过了
Signature::create($values)->associate($user_id);
谢谢您需要一个名为
user\u signature
的表,其模式如下:
$table->integer('user_id')->unsigned();
$table->integer('signature_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('signature_id')->references('signatures')->on('users');
然后您的用户
模型应具有以下方法:
型号用户
public function signatures() {
return $this->belongsToMany('App\Signature');
}
现在您已经建立了模型之间的多对多
关系,您可以做的是:
存储新记录(用于签名的控制器)时:
同样,在更新记录(用于签名的控制器)时:
首先,
associate
要求将模型对象作为参数传递。请看这里:
Is也用于属于
关系,而不是像您这样的多对多
。请看这里:
基于此,您应该做的是:
Signature::create($values)->users()->attach($user_id);
考虑到您的表是用户、签名和用户签名 在model:User.php中定义关系
class User extends Model {
public function signatures() {
return $this->belongsToMany('\App\Signature', 'user_signatures');
}
}
定义模型中关系的倒数:Signature.php
class Signature extends Model {
public function users() {
return $this->belongsToMany('\App\User', 'user_signatures');
}
}
在控制器中,您可以执行以下操作:
//create a new signature
$signature = new Signature($values);
//save the new signature and attach it to the user
$user = User::find($id)->signatures()->save($signature);
反之亦然:
$user = User::find($user_id);
$signature = Signature::create($values)->users()->save($user);
或者,如果您已有签名,则应执行以下操作:
$user = User::find($id);
$user->signature()->attach($signature->id);
请注意,attach()和detach()接受id或id数组
Laravel docs提供了更多细节和更好的示例。您应该检查attach()、detach()和sync()方法。请看一看:非常感谢!碰巧我有一个名为user\u signature而不是signature\u user的关系表,所以这个命令给了我一个错误,因为目标表不存在。你知道我需要做什么吗?非常感谢,非常清楚的回答!但是,我需要在签名端进行存储;不在用户端。可能吗?怎么做?我已经编辑了答案,你可以看一下。非常感谢!碰巧我有一个名为user\u signature而不是signature\u user的关系表,所以这个命令给了我一个错误,因为目标表不存在。你知道我需要做什么吗?用适当的表名更改belongsTo方法中的第二个参数。这应该可以很好地理解。最后一行代码$user->signature()中有一个拼写错误,签名末尾没有“s”。
$user = User::find($user_id);
$signature = Signature::create($values)->users()->save($user);
$user = User::find($id);
$user->signature()->attach($signature->id);