okuurt
@okuurt (徹 小山)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[初級] php/laravel 検索機能実装 検索結果が表示されない

解決したいこと

投稿アプリの投稿のキーワードを拾い、表示させる検索処理を実装しています。

発生している問題・エラー

検索処理が行われない。
検索窓にキーワードを入力しても、エラーにもならず、表示も変わらない。

前提

Micropostsテーブルは、投稿テーブル(Postsテーブル)

該当するソースコード

my-laravel-app/app/Http/Controllers/MicropostController.php

    /**
     * 投稿一覧表示アクション
     */
     public function index(Request $request)
     {
         $microposts = Micropost::getAll();
         $viewParams = [
             'microposts' => $microposts,
         ];


         #キーワード受け取り
         $search = $request->input('search');
         #クエリ生成
         $query = micropost::query();
         #もしキーワードがあったら
         if($search = request('search'))
         {
            $query->where('users','like','%{$search}%')->orWhere('content','like','%{$search}%');
         }
return view('micropost.index', $viewParams);
     }

my-laravel-app/database/migrations/2021_02_26_141741_create_microposts_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMicropostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('microposts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->text('content');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('microposts');
    }
}


自分で試したこと

投稿一覧表示アクション内に検索実装を追加しました。

heroku 7.49.1
docker環境
Laravel Framework 7.30.4
プッシュなどはgithub desktop使用

参考記事https://terrblog.com/laravel%E3%81%A7%E6%A4%9C%E7%B4%A2%E6%A9%9F%E8%83%BD%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B/#i

0

1Answer

$query->where('users','like','%{$search}%')->orWhere('content','like','%{$search}%');

ifの中に到達しているとした場合、ここにひとつ問題があります。
{}で文字列の中に変数を展開とした場合、
シングルクォーテーションを使用した文字列では、変数が展開されません。
つまり「{$search}」という文字列で検索していることになります。
ダブルクォーテーションを使用しましょう。
"%{$search}%"

$var = 'あいうえお';
echo '{$var}'; // {$var}
echo "{$var}"; // あいうえお
1Like

Your answer might help someone💌