【问题标题】:Laravel queries (function find() ) in Laravel throught using polymorphic ralationshipLaravel 通过使用多态关系在 Laravel 中查询(函数 find() )
【发布时间】:2020-12-01 10:01:21
【问题描述】:

我是 Laravel 的新手,对通过使用多态关系进行 Laravel SQL 查询有一些疑问

情况是: 我的 SQL 中有两个不同的表。 一个表“庄园”包含庄园列表及其参数 另一个表是“type_categories”,其中包含类型类别列表 每个庄园都可以与许多类型类别相关,并且每个类型类别都可以有许多庄园(所以我使用多态关系多对多)。 它们通过第三个表相关''

因此,我需要做一个查询,它将找到与类别相关的所有房地产,但我的用户可以选择许多类别,而不仅仅是一个。

我尝试使用函数find(1)->estates;,它作为参数具有类别类型的ID,我试图找到相关的庄园。它工作得很好,但问题是,我的用户需要为多个类别和函数找到一个属性,但是在我们nave 多态关系的情况下,函数 finds 只使用一个参数,而不是我需要的几个参数。

有没有办法在函数 find() 中使用多个参数并使用多态性? 当然,它还有其他一些功能......

然后我给你看我的代码。

庄园模型外观:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Estate extends Model
{
    protected $fillable = ['title', 'slug', 'estate_text', 'created_by', 'modified_by'];

    public function categories() {
        return $this->morphToMany('App\TypeCategory', 'categoryable');
    }
}

类型类别模型外观:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class TypeCategory extends Model
{
    protected $fillable = ['title', 'slug', 'parent_id', 'created_by', 'modified_by'];

    public function estates() {
        return $this->morphedByMany('App\Estate', 'categoryable');
    }

}

最后,我尝试选择房地产模型的房地产控制器看起来:

use Illuminate\Http\Request;
use App\Estate;
use App\TypeCategory;

class EstateController extends Controller {

    public function searchEstate() {

        $estates = TypeCategory::find(1)->estates;

        return view('main', [
            'estates' => $estates
        ] );
    }

}

【问题讨论】:

    标签: php sql laravel polymorphism


    【解决方案1】:

    我不确定这是否是您的问题。 试试这个:

     $estates = Estate::whereHas('categories', function ($query) {
        $query->whereIn('slug', ['xxx','yyy','zzz']);
     })->get();
    

    【讨论】:

    • 感谢您的回答。它很好,但我可能不需要。我不好问。一些附加信息。 $estates = TypeCategory::where('slug','yourslug')-&gt;firstOrFail()-&gt;estates; 有效。但是像 'yourslug' 我有一些参数,这个参数将是一个数组。我不确切知道数组将有多少个参数,但我需要比较,如果这个参数中的任何一个等于'slug',如果是,将它添加到结果$estates。所以我需要比较,如果'slug'与所有数组参数,并在结果中选择$estates。所有庄园,“slug”与任何数组参数相同。
    • 我更新了答案,希望对你有帮助。
    猜你喜欢
    • 2021-07-23
    • 2019-02-07
    • 2019-04-04
    • 2020-12-15
    • 2019-09-30
    • 2017-09-03
    • 2021-05-27
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多