2024年3月9日发(作者:)

*/

static::deleting(function ($model) {

$class = get_class($model);

info("HasArchive Trait deleting {$class} {$model->id}");

if ($archive = $model->archive) {

$archive->delete();

}

});

static::created(function ($model) {

info(__CLASS__ . __METHOD__);

});

}

/**

* Model has an archive.

*

* @return mixed

*/

public function archive()

{

return $this->morphOne(Archive::class, 'model_has_archive');

}

/**

* Scope of params.

*

* @param $query

* @param array $params

* @return mixed

*/

public function scopeOfParams($query, $params = [])

{

$field = null;

$keyword = null;

$sort = null;

$order = null;

extract($params);

$class = $this->getMorphClass();

$table = $this->getTable();

$query->leftJoin('archives', '_has_archive_id', '=', "{$table}.id")

->where('_has_archive_type', $class)

->select(["{$table}.*"]);

if ($keyword) {

if ($field) {

$query->where(function ($query) use ($field, $keyword) {

$query->orWhere($field, 'regexp', $keyword);

});

} else {

$query->where(function ($query) use ($keyword) {

foreach (['', '_pinyin'] as $field) {

$query->orWhere($field, 'regexp', $keyword);

}

});

}

}

if ($sort && $order) {

$query->orderBy($sort, $order);

}

return $query;

}

/**

* Scope recommended.

*

* @param $query

* @return mixed

*/

public function scopeRecommended($query)

{

return $query->whereHas('archive', function ($query) {

return $query->recommended();