【问题标题】:Laravel Scout - The relationship is not added at creationLaravel Scout - 创建时不添加关系
【发布时间】: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


【解决方案1】:
public function update(Request $request, $id)
  {
    $page = Page::with('Content')->findOrFail($id);

    $page->update($request->all());

    $page->content->update($request->all());

    $page = $page->fresh();

    return $page;
  }

会有用的

【讨论】:

  • 更新工作正常,正如我所说。问题出在 store 方法上。
【解决方案2】:
// use Content; // after namespace
class PageController extends Controller
{    
  public function store(Request $request)
  {
    $page = Page::with('content')->create($request->all());

    return $page;
  }
try this step

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 2019-11-23
    • 2020-03-09
    • 2019-06-30
    • 1970-01-01
    • 2018-03-23
    • 2022-01-26
    • 2013-01-03
    • 2021-06-20
    相关资源
    最近更新 更多