Laravel 5 Eloquent有很多关系将null放入关键字段

时间:2015-03-17 22:57:34

标签: laravel eloquent laravel-5

我有一个Artist模型和一个Item模型。

class Artist extends Model {
    protected $table = 'contactsdata';
    protected $primaryKey = 'c_id';

    public function artworks() {
        return $this->hasMany('App\Item', 'c_id', 'c_id');
    }
}

class Item extends Model {
    protected $table = 'stock';
    protected $primaryKey = 's_id';
}

在我的ArtistsController中,我有这段代码:

public function show($id)
    {
        DB::enableQueryLog();
        $artist = Artist::find($id);
        $artworks = Artist::find($id)->artworks;
        dd(DB::getQueryLog(), $artworks->toArray());        
    }

在数据库中有许多记录有资格填充$ artwork。但这是我的dd()输出:

array:2 [▼
  0 => array:3 [▼
    "query" => "select * from `contactsdata` where `contactsdata`.`c_id` = ? limit 1"
    "bindings" => array:1 [▼
      0 => "2242"
    ]
    "time" => 2.59
  ]
  1 => array:3 [▼
    "query" => "select * from `stock` where `stock`.`c_id` is null"
    "bindings" => []
    "time" => 2.52
  ]
]
[]

由于某种原因,对于第二个或关系查询,if字段(c_id)设置为null。有任何想法吗?救命啊!

2 个答案:

答案 0 :(得分:1)

为了实现你想要的,你应该在这里使用:

$artist = Artist::find($id);
$artworks = $artist->artworks;

而不是:

$artist = Artist::find($id);
$artworks = Artist::find($id)->artworks;

答案 1 :(得分:1)

谢谢大家。我自己解决了这个问题。雄辩的关系字段名称区分大小写。出于某种原因,我的数据库表具有以大写形式命名的所有字段(在其方案中)。一旦我将hasMany参数更改为'C_ID','C_ID'一切正常。

非常值得知道Eloquent关系字段名称是CASE SENSITIVE。