您好,我正在学习laravel,但在从我的关系中检索数据时遇到问题。
在我的数据库中,“产品”和“组”充满了虚拟数据。
我在产品模型中这样定义了我的关系:
static volatile boolean stopLoop = false;
public static void main(String... args) throws Exception {
Thread t = new Thread(() -> {
while (true) {
String input = System.console().readLine();
if (input.equals("!off")) {
stopLoop = true;
}
}
});
t.start();
while (!stopLoop) {
// ...
}
}
在我的小组中,反之亦然:
public function Group()
{
return $this->hasMany('App\Groups','product_id', 'id');
}
我引用我的产品表的方式是:
public function Product()
{
return $this->belongsTo('App\Product','product_id', 'id');
}
现在我在数据库中的“组”下有“ product_id”列,它是否链接到产品ID中。
groups表包含其自动递增的id和product_id外键列。
“产品”表的ID和名称列自动递增。
问题在这里: 如何返回组表中不为空或具有值(产品ID)的产品。
我在过滤器控制器中尝试过类似的操作:
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
但这给了我未定义关系的呼唤。
我不确定如何访问belongsTo或hasMany方法,以及我的产品表中是否需要额外的group_id列。
答案 0 :(得分:1)
您将关系命名为错误。它应该为groups
并以小写字母定义为
public function groups()
{
return $this->hasMany('App\Groups','product_id', 'id');
}
并使用->has()
检查是否存在
public function getProductsWithGroup()
{
$Products = Product::has('groups')->get();
return $Products ;
}
->with()
用于增加负载,而->has()
用于检查存在性和过滤器。
要获得没有任何组的产品,
$Products = Product::doesntHave('groups')->get();
要查看使用->has()
检查的其他方法,请https://laravel.com/docs/5.7/eloquent-relationships#querying-relationship-existence