这是我目前的迁移:
class News extends Migration
{
public function up()
{
Schema::create('News', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('description');
$table->integer('user_id')->unsigned()->index();
$table->string('imgPath')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::drop('News');
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要分别在这些列上创建一个全文索引:title description.所以我正在寻找这样的事情:->fulltext().但是我在Laravel文档中找不到类似的东西.
无论如何,
(title)(title, description)注意:我想要一个允许我像这样搜索的intex:. . . match(col) against('value')
Ami*_*pta 13
Laravel不支持FULLTEXT搜索.但您可以使用原始查询:
DB::statement('ALTER TABLE News ADD FULLTEXT search(title, description)');
Run Code Online (Sandbox Code Playgroud)
注意 - 如果您不使用MySQL 5.6+,我们必须将数据库引擎设置为MyISAM而不是InnoDB.
$table->engine = 'MyISAM'; // means you can't use foreign key constraints
Run Code Online (Sandbox Code Playgroud)
对于搜索,您可以这样做:
$q = Input::get('query');
->whereRaw("MATCH(title,description) AGAINST(? IN BOOLEAN MODE)", array($q))
Run Code Online (Sandbox Code Playgroud)
Kha*_*eal 12
Laravel 9+现在完全支持全文索引。要定义完整索引列,请使用以下命令
$table->fullText('body');
Run Code Online (Sandbox Code Playgroud)
您还可以在查询中使用whereFullText
User::whereFullText('body', 'john doe')->get();
Run Code Online (Sandbox Code Playgroud)
注意:Laravel 8+ 支持全文索引,但没有Where 子句选项