আপনি কীভাবে চূড়ান্তভাবে "নাল না থাকলে" চেক করবেন?


218

ক্ষেত্রটি শূন্য না হলে আপনি কীভাবে পরীক্ষা করবেন স্পষ্টভাবে ?

আমি চেষ্টা করেছি Model::where('sent_at', 'IS NOT', DB::raw('null'))->...কিন্তু এটি IS NOTতুলনার পরিবর্তে একটি বাধ্যতামূলক হিসাবে দেয় ।

এটি DB::getQueryLog()সম্পর্কে এটি যা বলে:

  'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
  'bindings' => 
    array (size=3)
      0 => string 'IS NOT' (length=6)
      1 => int 1
      2 => int 4

আপনি এটি ব্যবহার !=না করে ব্যবহার করার চেষ্টা করতে পারেন ।
জাটোচনিটডান

1
@ জাটোচনিটড্যান দ্য! = অপারেটর ন্যূনুয়াল মানগুলির সাথে কাজ করে না। প্রতি মাইএসকিউএল ডকুমেন্টেশন : "আপনি যেমন =, <, অথবা <> শূন্য জন্য পরীক্ষার হিসেবে গাণিতিক তুলনা অপারেটরদের ব্যবহার করতে পারবেন না।"
সোলারিসার

উত্তর:


402

স্বতঃস্ফূর্তভাবে এর জন্য একটি পদ্ধতি রয়েছে (লারাভেল 4। * / 5. *);

Model::whereNotNull('sent_at')

লারাভেল 3:

Model::where_not_null('sent_at')

1
আমার মুছে ফেলা ক্ষেত্রের নালটি পরীক্ষা করা দরকার, তাই আমি এটিকে পরিবর্তিত whereNull('deleted_at')করেছি এবং আমার ক্যোয়ারীটি চলমান রয়েছে।
তরুন

7
আরেকটি অননুমোদিত বৈশিষ্ট্য। ঠিক আছে, আপনি যদি এপিআই ডক্স গণনা না করেন তবে লারাভেলের মূল ডকুমেন্টেশনগুলি এর কোনও উল্লেখ করে না।
পুরো

12
whereNotNull()পদ্ধতি (এবং বেশ কিছু অন্যদের যা পূর্বে অনথিভুক্ত হয়) সংস্করণ 5.1 মধ্যে ডকুমেন্টেশন জোড়া হয়েছে: laravel.com/docs/5.1/queries#where-clauses
বেন জনসন

@ অ্যারোস তবে ক্যোয়ারি বিল্ডারে, স্পষ্টভাবে নয় (
লারাভেল

@ পিপিআরন্দা আপনার অর্থ কি তা নিশ্চিত নন, তবে আমার মন্তব্যটি 4 বছর আগে এবং লারাভেল 4 সম্পর্কে, আজকাল আমরা লারাভেলে 6 এ এসেছি I আমার ধারণা পরিস্থিতি পরিবর্তিত হয়েছিল। লারাভেলের মূল ডকুমেন্টেশনগুলি এখনও খুব সম্পূর্ণ না হলেও এটি একগুচ্ছ গাইডের মতো অনুভব করে।
সারা

20

আমার মতো কেউ যদি লারাভেল 5.2.23 এ কোয়েরি বিল্ডারের সাথে এটি করতে চান তবে এটি -> এর মতো করা যেতে পারে

 $searchResultQuery = Users::query(); 
 $searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
 $searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null 

বা মডেল মধ্যে সুযোগ সঙ্গে:

public function scopeNotNullOnly($query){

    return $query->where('status_message', '<>', '');
}

1
মানে কি 'and'?
পাঠানো হয়েছে

1
প্রকৃতপক্ষে এখানে 'এবং' কিছুই করে না তবে প্রথম পরামিতিটি অ্যারে হলে এটি করবে। পদ্ধতিটির প্রোটোটাইপটি এখানে: public function where($column, $operator = null, $value = null, $boolean = 'and'); এবং অবস্থান -".....\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php"
আতিকুর


4

আমরা ব্যবহার করতে পারি

Model::whereNotNull('sent_at');

অথবা

Model::whereRaw('sent_at is not null');

4

আমি দেখছি এই প্রশ্নটি কিছুটা পুরানো তবে আমি উত্তরটির সন্ধান করতে দৌড়ে এসেছি। যদিও আমি এখানে উত্তর দিয়ে সাফল্য পাইনি আমি মনে করি এটি হতে পারে কারণ আমি পিএইচপি 7.2 এবং লারাভেল 5.7 এ আছি বা সম্ভবত কারণ আমি ল্যারাভেল টিঙ্কার ব্যবহার করে সিলিআইতে কিছু তথ্য নিয়ে প্রায় খেলছিলাম।

আমার এমন কিছু জিনিস রয়েছে যা আমি চেষ্টা করেছি যা আমার এবং অন্যদের জন্য কাজ করেছিল যা আমি আশা করি না যে অন্যদের সাহায্য করবে।


আমার সাফল্য নেই:

    MyModel::whereNotNull('deleted_by')->get()->all();             // []
    MyModel::where('deleted_by', '<>', null)->get()->all();        // []
    MyModel::where('deleted_by', '!=', null)->get()->all();        // []
    MyModel::where('deleted_by', '<>', '', 'and')->get()->all();   // []
    MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
    MyModel::where('deleted_by', 'IS NOT', null)->get()->all();    // []

উপরের সমস্তটি আমার জন্য একটি খালি অ্যারে ফিরিয়ে দিয়েছে


আমার অবশ্য সাফল্য ছিল:

    DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]

এটি যেমনটি প্রত্যাশা করেছিলাম তেমন ফলাফলগুলি অ্যারেতে ফিরিয়েছে। দ্রষ্টব্য: আপনি যদি চান তবে আপনি অ্যারের পরিবর্তে all()একটি আলোকসজ্জা \ ডাটাবেস \ স্বতন্ত্র \ সংগ্রহ ফিরে পেতে পারেন।



-11

আপনি যদি মুছে ফেলা রেকর্ড অনুসন্ধান করতে চান (সফ্ট মুছে ফেলা রেকর্ড), ব্যবহারকারী বুদ্ধিমান মডেল ক্যোয়ারী করবেন না। পরিবর্তে ডিবি :: টেবিল ক্যোয়ারী যেমন নীচে ব্যবহার করার পরিবর্তে ব্যবহার করুন:

$stu = Student::where('rollNum', '=', $rollNum . '-' . $nursery)->first();

ব্যবহার করুন:

$stu = DB::table('students')->where('rollNum', '=', $newRollNo)->first();

এই প্রশ্নের প্রশ্নের সাথে কোনও সম্পর্ক নেই। তদ্ব্যতীত, Db::tableনরম মোছা রেকর্ডগুলি সন্ধান করতে আপনার প্রয়োজন হয় না । আপনি তাদের পদ্ধতিটি দিয়ে ফিল্টার করতে পারবেন withTrashed(), যেমন ডক্সে
gvsrepins
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.