Php 检查laravel中跨数据库的关系是否存在

Php 检查laravel中跨数据库的关系是否存在,php,laravel,Php,Laravel,我在base连接中有blogs表,Blog模型如下所示 class Blog extends Model { protected $connection = 'base'; public function category() { return $this->hasOne('App\Models\Category', 'id', 'category_id'); } } 我在商店连接中有分类表 class Category extends M

我在base连接中有blogs表,Blog模型如下所示

class Blog extends Model
{
    protected $connection = 'base';
    public function category()
    {
        return $this->hasOne('App\Models\Category', 'id', 'category_id');
    }
}
我在商店连接中有分类表

class Category extends Model
{
    protected $connection = 'shop';
    public function blogs()
    {
        return $this->hasMany('App\Models\Blog', 'category_id', 'id');
    }
}
现在,如果有博客的话,我想用他们的博客来显示分类列表

我的问题是:

CategoryBlogResource::collection(
            Category::with('blogs')
                ->orderBy('id', 'desc')
                ->get()
        );
当我搜索时,has()不能跨数据库工作

我如何处理每个类别的博客的存在? 我不想显示没有任何博客的类别。

您应该使用has()而不是with() 为什么不在db上工作?它是为……设计的吗。。。
我也曾经遇到过这个问题,只是用()和has()方法链接

CategoryBlogResource::collection(
    Category::with('blogs')     // Get Relationship data
    ->has('blogs')              // check if category has any blog
    ->orderBy('id', 'desc')
    ->get();
);

我假设你的模型上的关系函数是正确的。如果你想过滤例如“抓取任何博客标题以'abcde'开头的类别”,那么你应该使用方法

我不知道为什么,但我对你的数据库设计感觉不好,为什么你的博客和类别处于不同的连接中?你试过用它们的db名称作为列名的前缀吗,就像你的关系定义中的数据库列一样?@AbolfazlMohajeri因为我想使用其他程序(商店)中的分类表@Nasa你能解释更多吗?我把我的关系和模型放在QuetionTables中,因为表不在同一个数据库中,has()不起作用。这些数据库是同一类型的吗?MySQL+MySQL还是Postgre+Postgre?尝试使用多个连接。也许这对你有点帮助。因为表不在同一个数据库中,所以has()不起作用,我在问题中提到过