当前位置: 首页 > 知识库问答 >
问题:

如何从Laravel 7中的多个模型中获得查询结果?

程磊
2023-03-14

我有两个模型奖学金和水平,他们有多对多的关系。为此,我在数据库中有两个表作为奖学金和级别,还有一个数据透视表级别。我想根据奖学金(头衔、申请截止日期)和级别(姓名)查询是否获得奖学金

柱:

我的级别表有:id、名称、slug、创建时间、更新时间

我的奖学金表有:id,标题,段塞,描述,图像,大学,app_deadline,截止日期,备注,place_id,created_at,updated_at

和级别奖学金有:id,奖学金id,级别id,创建时间,更新时间

我的奖学金模式

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Scholarship extends Model
  {

      public function levels(){
        return $this->belongsToMany('App\Level')->withTimestamps();
      }

}

我的关卡模型

<?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Level extends Model
     {
        public function scholarships(){
          return $this->belongsToMany('App\Scholarship')->withTimestamps();
     }
  }

我可以查询奖学金模型,但如何关联级别模型

 $query = $request->input('query');

    $field = Field::where('title','LIKE',"%$query%")->first();
    $fieldId = $field->id;

    $scholarships = $field->scholarships()->latest()->paginate(10);;

    $scholarship = Scholarship::where('title','LIKE',"%$query%")
        ->orWhere('app_deadline','LIKE',"%$query%")
        ->orWhere(scholarship()->levels()->name,'LIKE',"%$query%")
        ->latest()->get();

共有1个答案

杨无尘
2023-03-14

您可以这样做:

 $query = $request->input('query');
 $field = Field::where('title','LIKE','%' . $query. '%')->first();
 $fieldId = $field->id;
 $scholarships = $field->scholarships()->latest()->paginate(10);

 $scholarship = Scholarship::whereHas('levels' , function($q) use($query) {
      $q->where('name', 'LIKE', '%' . $query. '%');
 })
 ->where('title','LIKE','%' . $query. '%')
 ->orWhere('app_deadline','LIKE','%' . $query. '%')
 ->latest()->get();

试试这个它会帮助你:

编辑1:

$query = $request->input('query');
 $field = Field::where('title','LIKE','%' . $query. '%')->first();
 $fieldId = $field->id;
 $scholarships = $field->scholarships()->latest()->paginate(10);

 $scholarship = Scholarship::with(['levels' , function($q) use($query) {
      $q->where('name','LIKE','%' . $query. '%');
 }])
 ->where('title','LIKE','%' . $query. '%')
 ->orWhere('app_deadline','LIKE','%' . $query. '%')
 ->latest()->get();
 类似资料:
  • 问题内容: 如果我的查询包含一个类,例如: 然后我迭代它,那里是一个类的对象。 那么如何从包含多个类的查询中获取结果呢?例如: 问题答案: for (Object[] result : query.list()) { User user = (User) result[0]; Group group = (Group) result[1]; }

  • 问题内容: 如果我的查询包含一个类,例如: 然后我迭代它,那里是一个类的对象。 那么如何从包含多个类的查询中获取结果呢?例如: 问题答案:

  • 我有以下表格: 表名称 -----| 表字段 图书--------------------图书id、图书名称 作者 ---------- | author_id、author_name 图书作者-作者id,图书id 用户------------------用户id、用户名 注释----------注释id,注释 评论|用户|评论| id、用户id、图书id、日期 我需要显示书名,它的作者,以及为这

  • 问题内容: 当我从命令行调用存储的proc时,我得到以下信息。 这是我的Java代码的片段 当我执行该语句时,仅返回event_table结果。我阅读以下查询: 我试图避免对数据库发出多个请求,因为它非常慢(300毫秒,具体取决于多少结果) 可能吗? 问题答案: 我找到了这篇很棒的文章。http://www.herongyang.com/JDBC/MySQL-CallableStatement-M

  • 我试图获得一个返回“加权分数”的表,该表带有我为以下模式的每种类型设计的公式: 收藏夹:userID,drinkName 然而,这只返回特定类型的饮料,而不是每种类型的饮料的表。

  • 问题内容: 我想知道如何编写此查询。 我知道这个实际的语法是虚假的,但是它将帮助您理解我想要的。我需要这种格式,因为它是更大查询的一部分。 我需要所有这些都在一个查询中返回。 此外,它必须排成一排,因此以下内容将不起作用: 问题答案: 您可以将语句与聚合函数一起使用。这与某些RDBMS中的函数基本相同: