我试图通过关系从模型调用自定义方法。
用户模型:
class User extends Model
{
public function files()
{
return $this->hasMany(Files::class, 'file_id', 'id');
}
}
文件模型:
class Files extends Model
{
public function cover()
{
dd('blah blah');
}
}
在我的控制器中我说:
$user = User::find(1);
$user->files()->cover();
,但我会得到这个错误:
Call to undefined method IlluminateDatabaseEloquentRelationsHasMany::cover()
我的代码中有什么问题?
基本上您在集合上调用cover()
方法。这就是为什么这不起作用。
您正在使用hasMany
Laravel关系。并且该hasMany
返回相关记录的收集(项目(。而且您无法直接调用任何模型功能。
但是,如果您打电话给此功能。您需要首先循环项目,如以下示例: -
$user = User::find(1);
foreach($user->files() as $file) {
$file->cover();
}
上面的代码将为您提供输出。尝试一下。
如果要获取文件的所有封面,则可以这样做:
$user = User::with('files.cover')->find(1);
$covers = $user->files->pluck('cover')->flatten();
我想使用此方法检查然后存储封面。因为我需要在插入之前检查盖子,所以我无法使用创建方法,所以这将是创建的别名。所以我无法覆盖创建方法?
从中,您可以执行以下操作:
foreach($user->files as $file){
$cover = $file->cover()->firstOrCreate(['attribute' => $value]);
// If you want to check if you just created the cover
if($cover->wasRecentlyCreated){
// Do stuff
}
}