samedi 15 février 2020

Problem with filter in Laravel equivalent relationship

I am beginner in larval and php. I have this code:

Schema::create('dish_values', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('dishes_id')->unsigned();
            $table->foreign('dishes_id')->references('id')->on('dishes')->onDelete('cascade');
            $table->bigInteger('food_ingredient_id')->unsigned();
            $table->foreign('food_ingredient_id')->references('id')->on('food_ingredients');
            $table->bigInteger('company_id')->unsigned();
            $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
            $table->decimal('quantity', 9, 2)->default(0);
            $table->engine = "InnoDB";
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_unicode_ci';
        });


        Schema::create('dishes', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('company_id')->unsigned();
            $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
            $table->string('name', 100)->nullable();
            $table->longText('description')->nullable();
            $table->char('enable', 1)->default(1);
            $table->char('allergen', 1)->default(0);
            $table->engine = "InnoDB";
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_unicode_ci';
        });

        Schema::create('food_ingredients', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('company_id')->unsigned();
            $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
            $table->string('name', 120)->nullable();
            $table->decimal('garbage', 9, 2)->default(0);
            $table->decimal('energy_value', 9, 2)->default(0);
            $table->decimal('protein', 9, 2)->default(0);
            $table->decimal('fat', 9, 2)->default(0);
            $table->decimal('available_carbohydrates', 9, 2)->default(0);
            $table->decimal('roughage', 9, 2)->default(0);
            $table->longText('description')->nullable();
            $table->string('url_address', 160);
            $table->char('allergen', 1)->default(0);
            $table->char('allergen1', 1)->default(0);
            $table->char('allergen2', 1)->default(0);
            $table->char('allergen3', 1)->default(0);
            $table->char('available_in_demo', 1)->default(0);
            $table->char('enable', 1)->default(1);
            $table->engine = "InnoDB";
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_unicode_ci';
        });



class Dish extends Model
{
    protected $quarded = ['id'];
    protected $fillable = ['company_id', 'name', 'description',  'enable', 'allergen'];
    public $timestamps = false;

    public function components()
    {
        return $this->hasManyThrough('App\DishValues', 'App\Dish', 'id', 'dishes_id');
    }

    public function foodIngredient()
    {
        return $this->hasManyThrough('App\FoodIngredient', 'App\DishValues', 'dishes_id', 'id');
    }

    public function withoutAllergen()
    {
        return $this->foodIngredient()->where('allergen1', '=', '1');
    }
}

I have function:

Dish::where('enable', '=', 1)->with('components')
                ->where(function($q)use ($companyId) {
                    $q->where('company_id', $companyId) 
                        ->orWhere('company_id', 1);
                })
                ->where([
                ['name', 'LIKE', '%' . $query . '%'],
                ['enable', '=', 1],
            ])->get()

I need to display all dishes that contain allergens.

If I make this code:

Dish::where('enable', '=', 1)->with('components')
                ->where(function($q)use ($companyId) {
                    $q->where('company_id', $companyId)->where('allergen1', 1)
                        ->orWhere('company_id', 1);
                })
                ->where([
                ['name', 'LIKE', '%' . $query . '%'],
                ['enable', '=', 1],
            ])->get()

return me error:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'allergen1' in 'where clause' (SQL: select count(*) as aggregate from dishes where enable = 1 and allergen1 = 1 and (name LIKE %% and enable = 1 and enable = 1))

How repair this code?



from Newest questions tagged laravel-5 - Stack Overflow https://ift.tt/3bHkbwQ
via IFTTT

Aucun commentaire:

Enregistrer un commentaire