У меня есть две модели (категории и каналы) в морф-связи со статусом (активная, неактивная).
В момент создания новой категории или нового канала мне нужно присвоить активный статус новому созданному элементу. Для этого мне нужно передать $ type (канал или категорию) и идентификатор элемента " statusable ".
Вот мой CategoryController:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\CategoriesRequest;
use App\Profile;
use App\Status;
use Session;
use Auth;
class CategoriesController extends Controller
{
public function store(CategoriesRequest $request)
{
$category = Category::create([
'title' => $request->title,
'slug' => str_slug($request->title, '-'),
'about' => $request->about,
]);
$category->save();
$type = 'categories';
$id = $category->id;
$status = (new Status)->create($id, $type); <-- Hier I am passing the two variables to the function CREATE in Status Model
Session::flash('success', 'Category successfully created!');
return redirect()->route('categories.show', $category->slug);
}
}
И еще модель STATUS с методом CREATE, которая получает две переменные
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use App\Status;
Relation::morphMap([
'channels' => 'App\Channel',
'categories' => 'App\Category',
]);
class Status extends Model
{
protected $fillable = [
'status',
'statusable_type',
'statusable_id',
];
public function statusable()
{
return $this->morphTo();
}
public static function create($id, $type)
{ // I do hier dd($id); and dd($type) and the two variables have a value
$status = Status::create([
'statusable_id' => $id,
'statusable_type' => $type,
'status' => 'active', // I get the error here!
]);
$status->save();
return $status;
}
}
Я подтвердил, что две переменные поступили в метод CREATE (я вижу тогда, если я dd () it) в самом начале метода. Однако две строки после того, как я получаю эту ошибку:
Ошибка ввода: слишком мало аргументов для функции App \ Status :: create (), 1 передано в C: \ laragon \ www \ roads \ app \ Status.php в строке 41 и ожидается ровно 2
Что я делаю не так?
РЕДАКТИРОВАТЬ: У меня есть решение:
Если кому-то интересно
Я изменил вызов в контроллере на:
$type = 'categories';
$id = $category->id;
Status::create_status($id, $type);
и затем в модели состояния:
public static function create_status($id, $type)
{
$status = new Status;
$status->statusable_id = $id;
$status->statusable_type = $type;
$status->status = 'active';
$status->save();
return $status;
}