Php 如何让Laravel pivot表仅使用在创建时创建的?
在处理belongToMany关系时,使用透视表记录该关系 对于许多透视表,关系只是创建然后删除。它们没有自己的属性,因此您永远不会更新它们 我知道我可以这样做来自动设置更新的和创建的Php 如何让Laravel pivot表仅使用在创建时创建的?,php,laravel,laravel-5,eloquent,relationship,Php,Laravel,Laravel 5,Eloquent,Relationship,在处理belongToMany关系时,使用透视表记录该关系 对于许多透视表,关系只是创建然后删除。它们没有自己的属性,因此您永远不会更新它们 我知道我可以这样做来自动设置更新的和创建的 class Foo extends Model { public function bars() { $this->belongsToMany(Bar::class)->withTimestamps(); } } 但如何使用仅创建的_at?我不知道。你可以采取另一种方
class Foo extends Model
{
public function bars() {
$this->belongsToMany(Bar::class)->withTimestamps();
}
}
但如何使用仅创建的_at?我不知道。你可以采取另一种方法:
- 跳过
方法(避免在withTimestamps()
和
列中同时添加
created\u和
updated\u)
- 添加自定义轴列:
处创建在
class Foo extends Model
{
public function bars() {
$this->belongsToMany(Bar::class)->withPivot('created_at');
} // ^^^^^^^^^^^^^^^^^^^^^^^^
}
现在,使用这种方法,您需要在创建记录时手动将created\u的值设置为
:
$foo = Foo::find(1);
$foo->bars()->attach($someId, ['created_at' => now()->format('d-m-Y H:i:s')]);
// or whatever you use as date ^^^^^^^^^^^^^
此外,默认情况下,此列不会转换为日期
,这与Laravel处理时间戳列的方式相反,因此:
$foo->bars()->first()->pivot->created_at
不会是一个例子。如果需要,请指定并更新关系以使用自定义轴模型:
Pivot模型FooBar.php
class FooBar extends Pivot // <--
{
protected $casts = [
'created_at' => 'datetime:d-m-Y H:i:s',
];
}
class Foo extends Model
{
public function bars() {
$this->belongsToMany(Bar::class)->using(FooBar::class)->withPivot('created_at');
// ^^^^^^^^^^^^^^^^^^^^
}
}