我正在尝试使用Laravel的Eloquent选择特定列,但我遇到了一些问题。我只想从价格中选择数量,价格。我试过了
$prices = Price::select(array('quantity', 'price'))->whereMonthAndYearAndType($month,$year,'cpi')
->with(array('product'=>function($query){ $query->select('id','name'); }))
->with(array('market'=>function($query){ $query->select('id','name'); }))->get();
但我得到了Trying to get property of non-object
答案 0 :(得分:1)
您的代码段中没有任何内容可以产生该错误。但是,我怀疑当您尝试访问热切加载的product
或market
关系中的字段而不检查它们是否存在时,您会收到错误。
指定select语句和急切加载关系的一个常见问题是本地和外键通常被忽略了。但是,这些是Laravel用于匹配所有相关模型的值,因此也需要选择它们。
如果价格属于产品和价格属于市场,那么您还需要选择price.product_id和prices.market_id字段。如果价格有一个产品或价格有一个市场,那么你需要选择price.id字段,并在急切加载的关系(products.price_id或markets.price_id)上选择相应的外键。
尽管如此,即使解决了这个问题,在尝试访问相关记录之前检查以确保相关记录仍然是一个好主意。在hasOne / belongsTo关系中,如果相关记录不存在,则relationship属性将为NULL。如果您尝试访问NULL上的字段,您将收到您正在看到的错误。