【发布时间】:2019-06-14 06:14:04
【问题描述】:
PHP:7.3
Laravel:5.8
Laravel 侦察兵:7.1
Algolia Scout 扩展:1.6
class Page extends Model
{
use Searchable;
public function toSearchableArray()
{
$array = [
'title' => optional($this->content)->title,
'extra' => $this->extra,
];
return $array;
}
public function content()
{
return $this->morphOne(Content::class, 'contentable');
}
protected $fillable = ['extra'];
protected $with = ['content'];
}
class Content extends Model
{
public function contentable()
{
return $this->morphTo();
}
protected $fillable = ['title'];
protected $touches = ['contentable'];
}
class PageController extends Controller
{
public function store(Request $request)
{
$page = Page::create($request->all());
$page->content()->create($request->all());
return $page;
}
public function update(Request $request, $id)
{
$page = $this->findOrFail($id);
$page->update($request->all());
$page->content->update($request->all());
$page = $page->fresh();
return $page;
}
}
现有实例的侦察导入工作正常,所有实例都同步。
更新后同步工作正常,$touches 完成了这项工作。
$array = [
'title' => 'Title',
'extra' => 'Extra field',
];
在 store 中,内容关系为 null,并且在创建时未更新。
它似乎没有监听 content saved 事件。 (关系被添加到 $touch 数组中)。
$array = [
'title' => null,
'extra' => 'Extra field',
];
【问题讨论】:
-
我不明白你的问题是什么?
-
问题在于存储方法。它不附加内容关系数据。在更新工作正常。
标签: php laravel elasticsearch algolia laravel-scout