سؤال

بدأت بدراسة Laravel وواجهت مشكلة في استخدام النماذج.كيفية تحميلها؟على سبيل المثال في CodeIgniter استخدمته مثل $model = $this->load->model('some_model').في Laravel عندما أسميها من وحدة التحكم مثل Sites::OfUser() أنها تعمل بشكل جيد، ولكن عندما أتصل Sites::getId() تقول أن الطريقة يجب أن تكون ثابتة ...هل من الممكن استدعاء الأسلوب بدون ثابت أو أحتاج إلى إنشاء واجهات لكل نموذج؟

النموذج الخاص بي يبدو كالتالي:

namespace Models;

use Eloquent;

class Sites extends Eloquent {

    public function scopeOfUser($query)
    {}

    public function getId($name)
    {}
}
هل كانت مفيدة؟

المحلول

للطريقة الثابتة--

$type = المواقع ::scopeOfUser($query);

وإذا كنت تريد عاديًا مثل codeingiter، فاستخدم--

$model = مواقع جديدة ()؛
$type = $model->scopeOfUser($query);

نصائح أخرى

يمكنك بالطبع إنشاء طريقة ثابتة في النموذج، والقيام ببعض الأعمال الثابتة فيه (الحصول على معرف للاسم أو أي شيء آخر).

هذه ليست مشكلة.

ومع ذلك، يجب أن تعلن أنه ثابت إذا كنت تريد استخدام ::, ، وهو ما لا تفعله.

public static /* <-- this */ function getId($name)
{
    // Do work
    // return $result;
}

إذا كنت ترغب في الوصول إلى طريقة مع ::, ، ستحتاج إلى جعلها طريقة ثابتة أو إنشاء ملف مظهر زائف.

السبب Sites::OfUser() "يعمل" لأنك أضفت هذه الطريقة مسبوقة بـ scope.

النطاقات تسمح لك بإعادة استخدام منطق الاستعلام بسهولة في نماذجك.لتحديد النطاق ، ببساطة بادئة طريقة النموذج مع scope.

إذا كنت تريد استخدام الواجهات، يمكنك متابعة إجابتي هنا حول كيفية إنشاء الواجهة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top