Laravel: слишком мало аргументов для функции App \ Status :: create (), 1 передано и ожидается ровно 2 - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть две модели (категории и каналы) в морф-связи со статусом (активная, неактивная).

В момент создания новой категории или нового канала мне нужно присвоить активный статус новому созданному элементу. Для этого мне нужно передать $ 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...