Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Laravel 4:एक वाक्पटु वर्ग के सभी प्रश्नों के लिए WHERE शर्त कैसे लागू करें?

जवाब तब दिया गया जब कोई क्वेरी स्कोप नहीं था सुविधा उपलब्ध है।

आप मुख्य क्वेरी को केवल Post . के लिए ओवरराइड कर सकते हैं मॉडल, जैसे

class Post extends Eloquent
{
    protected static $_allowUnapprovedPosts = false;

    public function newQuery()
    {
        $query = parent::newQuery();

        if (!static::$_allowUnapprovedPosts) {
            $query->where('approved', '=', 1);
        } else {
            static::$_allowUnapprovedPosts = false;
        }

        return $query;
    }

    // call this if you need unapproved posts as well
    public static function allowUnapprovedPosts()
    {
        static::$_allowUnapprovedPosts = true;

        return new static;
    }
}

अब, बस कुछ भी उपयोग करें, लेकिन अस्वीकृत उपयोगकर्ता परिणाम में दिखाई नहीं देंगे।

$approvedPosts = Post::where('title',  'like', '%Hello%');

अब, यदि आपको सभी पोस्ट को पुनः प्राप्त करने की आवश्यकता है, यहां तक ​​कि अस्वीकृत पोस्ट भी तो आप उपयोग कर सकते हैं

$approvedPosts = Post::allowUnapprovedPosts()->where('title',  'like', '%Hello%');

अपडेट करें (क्वेरी स्कोप का उपयोग करके):

चूंकि, लैरावेल अब ग्लोबल क्वेरी स्कोप्स प्रदान करता है , लाभ उठाएं कि इस हैकी समाधान के बजाय, इस उत्तर की तारीख पर ध्यान दें, यह बहुत पुराना है और अब तक बहुत कुछ बदल गया है।

// Using a local query scope
class Post extends Eloquent
{

    public function scopeApproved($query)
    {
        return $query->where('approved', 1);
    }
}

आप इसे इस तरह इस्तेमाल कर सकते हैं:

$approvedPosts = Post::approved()->get();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL PHP असंगति

  2. मायएसक्यूएल लाइक + पीएचपी स्प्रिंटफ

  3. .नेट कोर 2.0 डाटाबेस पहला दृष्टिकोण स्कैफोल्ड-मैसकल डीबी का डीबीकॉन्टेक्स्ट

  4. मैं MySQL में डेटटाइम फ़ील्ड के घंटे के हिस्से से किसी क्वेरी को कैसे फ़िल्टर कर सकता हूं?

  5. जब मैं सीधे MySQL से प्राप्त करता हूं तो NodeJS ने जवाब दिया कि MySQL टाइमज़ोन अलग है