Я разрешаю пользователям загружать изображения в определенную модель (Stream
).Я хотел бы переместить эту логику кода в очередь, чтобы сделать процесс загрузки более плавным.
Это мой StreamDocumentsController.php
, в частности метод хранения:
public function store(Stream $stream)
{
//Validate the request.
//Removed in this example.
//Store the actual document on the server.
$store = request()->file('file')->store($stream->token);
//Set the attributes to save to DB.
$attributes['name'] = request()->file->getClientOriginalName();
$attributes['path'] = $store;
dispatch(new UploadDocuments($stream, $attributes));
//Return URL for now. (JSON later on..)
return response()->json([
'status' => 'success'
]);
}
Так что выше фактически будет хранить изображение на сервере, в этой строке:
//Store the actual document on the server.
$store = request()->file('file')->store($stream->token);
Теперь, когда я пытаюсь запустить этот код (загрузить изображение), я вижу в Laravel Horizon
, что задание действительно добавлено, но документ никогда не добавляется в базу данных.
Это мой UploadDocuments
job:
protected $stream;
protected $attributes;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Stream $stream, $attributes)
{
$this->stream = $stream;
$this->attributes = $attributes;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->stream->addDocuments($this->attributes);
}
Как видите, я хочу, чтобы моя работа выполняла метод addDocuments()
.
Фактический метод для этого хранится в моей модели Stream
:
Stream.php
:
/**
* A stream can have many documents
*/
public function documents()
{
return $this->hasMany(Document::class);
}
/**
* Add document(s) to the stream
*
* @return Illuminate\Database\Eloquent\Model
*/
public function addDocuments(array $attributes)
{
return $this->documents()->create($attributes);
}
Таким образом, при загрузке изображения процесс загрузки должен быть поставлен в очередь, но приведенный выше код только сохраняет фактическое изображение всервер, но никогда не база данных.Это похоже на то, что метод handle()
никогда не запускается.
Кроме того, это правильно?Потому что я не работаю с ->store($stream->token)
в своей работе, так что это никогда не ставится в очередь.
Любая помощь будет принята с благодарностью, так как я немного растерялся.