سلام دوستان.
من به دلایلی اطلاعات کاربر رو داخل یه جدول جدا به اسم profiles ذخیره کردم.
من سه تا جدول دارم:
جدول users
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('role')->default('user');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
جدول profiles
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onUpdate('CASCADE')->onDelete('CASCADE');
$table->string('fullName');
$table->string('phone');
$table->timestamps();
});
جدول jobs
Schema::create('jobs', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onUpdate('CASCADE')->onDelete('CASCADE');
$table->string('slug');
$table->string('title');
$table->string('category_name');
$table->string('history');
$table->string('state');
$table->string('city');
$table->longText('description');
$table->boolean('approved')->default(0);
$table->timestamps();
});
حالا زمانی که میخوام بین شغل های تایید شده جستجو رو بر اساس عنوان شغل که داخل جدول jobs و اسم کاربر که داخل جدول profiles است انجام بدم به ارور زیر بر میخورم:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'jobs.profile_id' in 'where clause' (SQL: select count(*) as aggregate from `jobs` where `title` LIKE %آرمین رحمتی% or exists (select * from `profiles` where `jobs`.`profile_id` = `profiles`.`id` and `fullName` LIKE %آرمین رحمتی% and `approved` = 2) and `approved` = 2)
کدی که نوشتم هم به صورت زیر هست.
public function approved() {
$jobs = Job::query()
->when($keyword = request('search'), function ($query) use ($keyword) {
$query->where('title', 'LIKE', "%{$keyword}%")
->orWhereHas('profile', function ($query) use ($keyword) {
$query->where('fullName', 'LIKE', "%{$keyword}%")
->where('approved', 2);
});
});
$jobs = $jobs->where('approved', 2)->latest()->paginate(10);
return view('panel.jobs.approved', compact('jobs'));
}
با سلام و وقت بخیر دوست گرامی
همونطور که پیغام ارورتون می گه ستون profile_id در جدول jobs وجود نداره
شما برای رفع این مشکلتون می تونید
1.یک ریلشن بنویسید و کالکشنتون رو فیلتر کنید که این روش کندتریه
@fakhraddin
الان کدمو به صورت زیر نوشتم ولی هچنان همون ارور رو میده.
public function approved() {
$jobs = Job::query()
->join('profiles', 'jobs.id', '=', 'profiles.user_id')
->when($keyword = request('search'), function ($query) use ($keyword) {
$query->where('title', 'LIKE', "%{$keyword}%")
->orWhereHas('profile', function ($query) use ($keyword) {
$query->where('fullName', 'LIKE', "%{$keyword}%")
->where('approved', 2);
});
});
$jobs = $jobs->where('approved', 2)->latest()->paginate(10);
return view('panel.jobs.approved', compact('jobs'));
}
با سلام و وقت بخیر
من چندتا نکته در مورد کوئری که زدید بدم و بعد براتون یک کوئری با منطق بهتر خدمتتون ارائه می دم
$jobs = Job::leftJoin('profiles', function($join) {
$join->on('jobs.user_id', '=', 'profiles.user_id');
})->where('jobs.approved', 1)->whereRaw('jobs.title LIKE ?', '%'.$keyword.'%')->
whereRaw('profiles.fullName LIKE ?', '%'.$keyword.'%')->latest->
get(['jobs.id', 'jobs.title', 'profiles.fullName']);
امیدوارم توضیحاتم هر چند طولانیه کمک کنه به شما و اگه بازم نیاز به راهنمایی داشتید خوشحال می شم کمکی بکنم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟