与多模型的laravel关系问题

问题描述 投票:-2回答:2

用户与creater一对一有关系,但creater与存档belongsToMany有关系

$creatorQuery = User::query();
    $cultivator_id = 2;
    $creatorQuery = $creatorQuery->select('id', 'name', 'email', 'role');

    $creatorQuery = $creatorQuery->with('creater', function($q) {
        $q->whereHas('archive', function($q) use($cultivator_id) {
            $query->where('caltivater_id', $cultivator_id);
        });
    });

    $creators = $creatorQuery->get();

显示错误mb_strpos()期望参数1为字符串,给定对象

php laravel laravel-5 laravel-5.5
2个回答
0
投票

function应该被传递到creater,所以你需要将你的调用更改为键/值数组:

$creatorQuery = $creatorQuery->with(['creater' => function($q) use($cultivator_id) {
    $q->whereHas('archive', function($q) use($cultivator_id) {
        $query->where('caltivater_id', $cultivator_id);
    });
}]);

0
投票

您已经说过要通过caltivater_id模型中定义的Archive值来获取用户。使用嵌套的whereHas()

$creators = User::whereHas('creator', function($q) use($cultivator_id) {
    $q->whereHas('archive', function($q) use($cultivator_id) {
        $q->where('caltivater_id', $cultivator_id);
    });
})
->with('creators')
->get();

或使用点符号:

$creators = User::whereHas('creator.archive', function($q) use($cultivator_id) {
    $q->where('caltivater_id', $cultivator_id);
})
->with('creators')
->get();
© www.soinside.com 2019 - 2024. All rights reserved.