从Eloquent获取Laravel中没有附加和关系的数据

时间:2017-11-08 14:25:12

标签: php laravel eloquent

我的模型Project有一些$appends和一些关系,如pagesbrandsstatus等。

$appendspagesPage,在$appends模型中有很多其他Project::find($id)。现在,当我with时,它会检索项目,它的页面以及属于Page的其他模型。 而且我还没有完成DB::table('projects')->where('id', $id)->get(); ,因此对于每个页面都会触发大量查询。

不使用

task_start

有没有更好的方法只加载项目模型,没有关系,没有附加,没有通过Eloquent?

7 个答案:

答案 0 :(得分:2)

你可以试试这个

User::where('user_id',$user_id)->get()->makeHidden(['full_name','start_end_date']);

答案 1 :(得分:1)

不幸的是,这不是它的工作原理。如果您想要删除附加内容,可按以下步骤操作:

$project = Project::find(1);
$project->setAppends([]);

return $project; //no values will be appended

但是,如果这些追加是在进行数据库调用而您不愿意,那么应该重新判断是否有附加值是有意义的。您是否认为将appends 始终包含在内是否有意义。

答案 2 :(得分:1)

对我有用:

var itemLetterSpacing = $scope.Obj.stylesheet["attribute-set"][1].attribute.filter(function(item) {
      return item._name === "letter-spacing";
})[0];

if(!itemLetterSpacing) { 
     $scope.Obj.stylesheet["attribute-set"][1].attribute.push($scope.xslLetterSpacing);
}
console.log($scope.Obj);

答案 3 :(得分:1)

我尝试访问的第二个模型的 append 字段有问题,它陷入了无限循环。 因此,在用户模型中;

代替

return $this->organisation->is_enabled;

使用:

return $this->organisation->setAppends([])->is_enabled;

为我解决了问题,因为setAppends([])函数未附加不必要的关系

答案 4 :(得分:0)

// YourModel.php

public static $withoutAppends = false;

public function scopeWithoutAppends($query)
{
    self::$withoutAppends = true;

    return $query;
}

protected function getArrayableAppends()
{
    if (self::$withoutAppends){
        return [];
    }

    return parent::getArrayableAppends();
}
$result = YourModel::withoutAppends()->all();

答案 5 :(得分:0)

我不知道它是否适用于包含多条记录的集合。但是如果你需要它用于没有关系的单个模型,你可以

$project->attributesToArray();

https://laravel.com/docs/8.x/eloquent-serialization#serializing-to-arrays

答案 6 :(得分:-1)

您可以使用自定义查询来获取结果:

DB :: table('用户为') - >加入(' state_history为sh',' sh.user_id',' =',' u.id') - > where(' u.id',' =',$ id) - >加入('用户为u1',' sh.team_id',' =',' u1.id') - >选择(& #39; u.name',' sh.state',' sh.created_at',' u1.name as tname') - > orderBy( ' sh.created_at',' desc') - > get();