Laravel中带有2个外键的搜索栏

Posted

技术标签:

【中文标题】Laravel中带有2个外键的搜索栏【英文标题】:Search bar with 2 foreign key in Laravel 【发布时间】:2019-06-10 13:10:30 【问题描述】:

在文件夹book.index.blade.php 上的搜索栏中,我想搜索我的表authorsname 或我的表bookcases 的字段code

到目前为止,我知道在我的表 authors 的字段 name 上进行搜索。 我的问题是如何使用我的表 bookcases 的字段 code 进行请求?我不知道语法... 我是新手。

public function index(Request $req) 

    if ($req->search == "") 
          $books = Book::paginate(5);
          return view('admin.books.index', compact('books'));

     else 

            $validated = $req->validate([
                'search' => 'alpha', 
            ]);

   $books = Book::whereHas('authors', function($query) use($req) 
            $query->where('name', 'like', '%' . $req->search . '%');
        )->paginate(5);
  return view('admin.books.index', compact('books'));
  


【问题讨论】:

你在寻找 SQL 或 Laravel 的答案吗? @jarlh: Laravel,其实我不知道合成器... 【参考方案1】:

您可以在搜索中附加更多 whereHas 条件,如下所示:

$books = Book::whereHas('authors', function($query) use($req) 
        $query->where('name', 'like', '%' . $req->search . '%');
    )->whereHas('bookcases', function($query) 
        $query->where('code', 'like', '%' . $req->search . '%');
    )->paginate(5);

如果您想在书柜中搜索作者,您可以将第二个whereHas更改为orWhereHas。 p>

Obs:我建议你多了解一下 Laravel 雄辩的关联对象的方式。它有一个学习曲线,但肯定会在未来有所帮助。

【讨论】:

【参考方案2】:

看看这个Search on Eloquent Relationships

否则,您也可以使用连接来执行此操作:

Book::join('authors', 'books.fk_author', 'authors.id')
    ->join('bookcases', 'books.fk_bookcase', 'bookcases.id')
    ->where('authors.name', 'LIKE', '%'. $req->search . '%')
    ->select('authors.name', 'table.other_column', 'table.another_column')
    ->paginate(5);

添加 orWhere 的提示如果您有多个搜索,请使用类似这样的内容,它更可靠:

->where(function ($query) 

    $query->orwhere('users.name', 'like', '%' . request('search') . '%')
        ->orWhere('users.id', 'like', '%' . request('search') . '%');
)

【讨论】:

【参考方案3】:

你可以试试这个:

restructuring books table to:
id
title
gender
author_id
bookcases_id


public function index(Request $req) 

   $s = $req->input('data');
    $data['search']=DB::table('books')
    ->leftjoin('authors', 'books.author_id', '=', 'authors.id')
    ->leftjoin('bookcases', 'books.bookcases_id', '=', 'bookcases.id')
    ->where('books.id','=',$s)
    -orWhere('bookcases.id','=',$s)

    return view('admin.books.index', $data);


希望这会有所帮助。这是查询生成器。只需导入use DB;

【讨论】:

以上是关于Laravel中带有2个外键的搜索栏的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.2中一列上有2个外键

Laravel 1 个外键,2 个表 Eloquent ORM

LARAVEL 5.5 外键约束的格式不正确'

从具有 2 个外键的 2 个表中选择

创建具有主键和2个外键的表

具有 2 个外键的复杂 MySQL 选择