Laravel多态关系分配模型



我有多态性关系

codes (code, soure_id, source_type)

来源:

websites (id, url)
books (id, isbn)

我在模型中编码了必要的关系(morphto,morphmany)。

如何将源分配给代码:

$source = Book::first();
    $code = new Code()
    $code->code = 'huxawex123ad'
    $code->source ... // How can I assign the book as the source?
    $code->save();

关系:

class Code extends Eloquent {
    public function source()
    {
        return $this->morphTo();
    }
};
class Book extends Eloquent {
    public function codes()
    {
        return $this->morphMany(Code::class, 'source');
    }
};

MorphTo关系类似于 BelongsTo的关系。因此,假设您的Code型号具有source()方法设置以返回morphTo()关系,则您的代码看起来像:

$source = Book::first();
$code = new Code()
$code->code = 'huxawex123ad'
$code->source()->associate($source);
$code->save();

此外,假设您的Book型号具有codes()方法设置以返回morphMany()关系,则您的代码可以像这样清理:

$source = Book::first();
$source->codes()->create(['code' => 'huxawex123ad']);

我不看到为多态关系设置的适当字段

将这些字段添加到代码表:

sourceable_id - integer
sourceable_type - string

关系就像:

 class website extends Model
 {
  /**
  * Get all of the website's codes.
  */
  public function codes()
  {
     return $this->morphMany('AppCode', 'sourceable');
  }
}

然后在您的控制器中:

$source = Book::first();
$code = new Code()
$code->code = 'huxawex123ad'
$code->source ... // How can I assign the book as the source?
$code->save();
$source->codes()->save($code);

最新更新