Laravel BelongsTo类的create方法在哪里?
我有一个上传的通用类Laravel BelongsTo类的create方法在哪里?,laravel,eloquent,Laravel,Eloquent,我有一个上传的通用类 <?php namespace App; use Illuminate\Database\Eloquent\Model; class File extends Model { protected $guarded = ['id']; } 这并不完全符合预期,但它会在数据库中创建文件模型。为什么? $this->avatar()。我检查了类、包含的特征以及它扩展的关系类 那么到底发生了什么,创建新模型的代码在哪里 我尝试使用一个ReflectionMet
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
protected $guarded = ['id'];
}
这并不完全符合预期,但它会在数据库中创建文件
模型。为什么?
$this->avatar()。我检查了类、包含的特征以及它扩展的关系类
那么到底发生了什么,创建新模型的代码在哪里
我尝试使用一个ReflectionMethod
但是当$this->avatar()->create()
工作时,新的ReflectionMethod($this->avatar(),'create')
返回一个ReflectionException
和消息Method illighted\Database\elount\Relations\BelongsTo::create()不存在
用于belongsTo()
的方法应该是保存()
,而不是创建()
。确保将文件
类作为参数传递:
$this->avatar()->save(new File([
'path' => $path,
]));
没有在belongsTo关系上保存实体的方法。创建实体后,可以将其与模型关联
$avatar = File::create([...]);
$this->avatar()->associate($avatar)->save();
为了允许查询关系,将未定义的方法调用传递给具有create方法的雄辩构建器实例
所有关系都扩展了关系类,该类定义:
public function __call($method, $parameters)
{
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
}
$result = $this->query->{$method}(...$parameters);
if ($result === $this->query) {
return $this;
}
return $result;
}
这会引发异常,根本没有这样的方法。但主要的问题是,我在代码中也找不到create
方法,但它不知怎的起作用了。我知道这些方法并不存在。问题是-为什么create
方法有效?@Džuris我已经添加了有关这方面的详细信息。您可以始终使用调试器或回溯跟踪跟踪跟踪,或者只查看类和父类本身。
public function __call($method, $parameters)
{
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
}
$result = $this->query->{$method}(...$parameters);
if ($result === $this->query) {
return $this;
}
return $result;
}