mb_strpos () ожидает, что параметр 1 будет строкой, объект задан при запросе 2 таблиц в Laravel - PullRequest
0 голосов
/ 25 сентября 2019

Хорошо, поэтому я не знаю, можно ли это сделать, но мне нужно объединить результаты предложений 2 Where из 2 таблиц в одну переменную.

Пока у меня есть эта работа для запроса одногоtable:

$allCompanies = Products::where('category_id', $id->id)->groupBy('company_id')->get();

И это для другого:

$companies = Company::where('visible', 0)->get();

Но есть ли способ получить их в той же строке запроса?Примерно так я могу получить, где идентификатор совпадает со столбцом идентификатора в одной таблице И где видимый равен 0 в другой?

Я пробовал это:

$allCompanies = Products::with('company', function($q){
            $q->where('visible', 0);
            })->where('category_id', $id->id)
            ->groupBy('company_id')->get();

, но получил эту ошибку:

mb_strpos() expects parameter 1 to be string, object given

Модель компании:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    public function products()
    {
        return $this->hasMany('App\Products');
    }
}

Модель продуктов

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Products extends Model
{
    protected $fillable = [
        'name',
        'description',
        'image',
        'size',
        'price',
        'stock',
        'company_id',
        'category_id'
    ];
    public function category()
    {
        return $this->belongsTo('App\Categories', 'category_id');
    }
    public function company()
    {
        return $this->belongsTo('App\Company', 'company_id');
    }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Зависит от того, что вы хотите:

Если вы хотите, чтобы все продукты от видимых компаний:

$products = Products::whereHas('company', function($q) {
   $q->where('visible',0);
})->get();

Если вы хотите, чтобы все компании со своими продуктами (что я бы посоветовал):

$Companies = Company::with('products')->where('visible',0)->get();
0 голосов
/ 25 сентября 2019

Самый лучший способ достичь этого - использовать Relationships и whereHas.Если у вас есть определенные отношения, вы можете сделать следующее:

$products = Products::where('category_id', $id->id)
                        ->whereHas('company', function($q) {
                          $q->where('visible', 0);
                        });

, который будет запрашивать все продукты с определенной category_id, которые также имеют отношения с компанией, имеющей столбец visible сзначение 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...