campaign-edianeh-98

دوره مجازی Laravel - جلسه 9 - Model و ذخیره سازی اطلاعات



visibility  
mode_comment   ۳۶

به نام خدا و سلام. برای ذخیره سازی داده ها در جدول های دیتابیس از model ها می شود که وظیفه برقراری ارتباط با دیتابیس و مدیریت تراکنش ها و کوئری ها را بر عهده دارند. در لاراول مدل ها توسط کلاس های خاصی تعریف شده که متد ها و ویژگی های خاصی دارند که در این جلسه بررسی می شوند.

info توجه

این مطلب یک جلسه از آموزش حرفه ای لاراول می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش حرفه ای لاراول

comment دیدگاه کاربران
developer replyپاسخ

سلام .
توی این پروژه به نحوه خرید ودانلود کاربر اشاره نشده.چون یک فروشگاه فایل مجازیه .امکان داره مواردی رو که به تکمیل پروژه کمک میکنه ودرساعت آموزش نمیگنجه توضیح کوتاه راجع به اون بدین خودمون دربارش تحقیق کنیم.

کیوان علی محمدی

سلام نحوه خرید و دانلود کاربر به صورت خرید اشتراک و پکیج هستش که کاملا آموزش داده شده.

MRZ65 replyپاسخ

سلام استاد.لطفاً پکیج یا پکیجهای اتصال به درگاه بانک ها در لارول(مثل larabook) را در زمان مناسب از دوره نصب و آموزش دهید.ممنون

کیوان علی محمدی

سلام اگر این پکیج ها اوکی باشن حتما.

MRZ65 replyپاسخ

سلام استاد.من یه جدول settings برای تنظیمات سایت دارم که شامل دو فیلد title (که کلید اصلی جدول)و value است. میخوام داده های فرم را به صورت دوبعدی دریافت کنم مثلاً برای نام سایت مقدار name فرم بصورت options[site_title] باشه که ایندکس آرایه(site_title) در ستون title و مقدار ارسال شده در value قرار بگیره.
با چه متدی باید این درخواست رو هندل کرد؟
توی کنترلر از متد زیر استفاده کردم
و با این خطا مواجه شدم

کیوان علی محمدی

سلام. بهتره از تابع insert استفاده کنی که برای ذخیره کردن چندین رکورد بهتره. قبل از عملیات insert هم بهتره روی داده ها یک foreach تعریف کنی و کلید و مقادیر رو به صورت آرایه تعریف کنی.

$insert_data = [];
foreach (request()->input('options') as $key => $value){
$insert_data[] = [
'title' => $key,
'value' => $value
];
}
Setting::insert( $insert_data );

MRZ65

ممنون استاد 😛

developer replyپاسخ

سلام استاد .دراین آموزش سبدخریدبرای پیاده سازی میشه.

کیوان علی محمدی

سلام دوست عزیز. اگه وقت بشه .

developer replyپاسخ

سلام استاد .دراین آموزش سبدخرید پیاده سازی میشه.

کیوان علی محمدی

سلام فعلا مشخص نیست.

محمد replyپاسخ

استاد وقتی با کد زیر میخام همه input هارو ببینم ، فقط _token و submit رو بهم نشون میده

کیوان علی محمدی

سلام. فیلد هاتون رو چک کنید.

milad boos

سلام
بخاطر این هست که شما داخل مدل مورد نظر

چنین آیتمی نداری
و باید آیتم های جدول رو جایگزین کنی

کیوان علی محمدی

بهتره از guarded استفاده کنیم.البته role در این جا باید در guarded قرار بگیره.

abolfazl omidi replyپاسخ

سلام لطفا راهنمایی کنید این اررور برای چیه؟
role رو هم داخل guarded گذاشتم

SQLSTATE[HY000]: General error: 1364 Field ‘role’ doesn’t have a default value (SQL: insert into `users` (`name`, `email`, `password`, `mobile`, `wallet`, `updated_at`, `created_at`) values (asd, ali.rezair@yahoo.com, 0988, 09304277549, 1234567, 2017-09-03 14:56:27, 2017-09-03 14:56:27))

کیوان علی محمدی

این خطا میگه ستون role مقدار پیش فرض نداره و شما در کوئری مقداری براش در نظر نگرفتید. ربطی به آرایه guarded نداره.مقدار پیش فرض کاربر رو براش ست کنید.

abolfazl omidi replyپاسخ

چرا برای من UserController مدل user رو نمیشناسه.
وقتی سورس پروژه رو نگاه میکنم داخل UserController کد use/App/user داره ولی داخل UserController من نداره .چرا ساخته نشده؟

کیوان علی محمدی

کلاس User به شکل پیش فرض در پروژه وجود داره.

dpfm32 replyپاسخ

سلام استاد .
من یه سوال داشتم :
فریم ورک قراره کار ما رو ساده تر کنه و سرعت کد نویسی ما رو بالا ببره ، درسته ؟
پس چرا توی لاراول برای اینکه فقط بخوایم یه رکورد توی دیتابیس ثبت کنیم حتما باید یه سری کار ها رو انجام بدیم ؟
مثلا باید برای هر جدولمون model ایجاد کنیم تا بتونیم رکوردی رو ثبت کنیم ، اما توی PHP خالص خیلی ساده تر از اینه و به راحتی میتونیم وصل شیم به دیتابیس و رکورد رو اضافه کنیم .
نظر شما چیه ؟

کیوان علی محمدی

سلام دوست عزیز در ابتدای کار اینطوری به نظر میرسه. اما وقتی مقیاس پروژه بزرگ و بزرگ تر میشه می بینید که خیلی از کدهای شما داره تکرار میشه و مجبور هستید برای هر چیزی کدنویسی کنید در حالی که فریمورک همه چیز رو از قبل آماده کرده. در یک insert ساده مطمئنا کدنویسی ساده php برنده هست ولی در برنامه های بزرگ تر دست برتری رو فریمورک داره.

Ahad Ghaderi replyپاسخ

سلام خسته نباشید من تا اینجای کار کاملا شبیه ویدیوها جلو اومدم اما UserController مدل user رو نمیشناسه و وقتی کد User:Create(reuerst()->all() رو وارد میکنم ارور زیر رو میده. درصورتی که توی ویدیو php storm خودش create رو میشناسه و کامل میکنه.

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Class ‘App\Http\Controllers\admin\User’ not found
کیوان علی محمدی

سلام و ممنون. کلاس User باید به درستی use بشه . اگه فضای نام رو نگاه کنید داره میگه کلاس User در فضای نام admin که ما همچین چیزی نداریم.

محمد پارسا کوشش replyپاسخ

سلام استاد . یک سوال داشتم . من در usercontroller کد زیر را قرار دادم اما وقتی کد را save میکنم و مرورگر را Reload میکنم یک اروری میدهد :
FatalThrowableError in userController.php line 22:
Class ‘App\Http\Controllers\admin\user’ not found
چی کاری باید کرد تا این ارور بر طرف بشود ؟
باتشکر از شما .

    public function store()
    {
        user::create(request()->all());
    }
کیوان علی محمدی

سلام همون طور که می بینید این خطا میگه کلاس user نمیتونه پیدا کنه. فضای نام و اسم کلاس رو چک کنید درست نوشته باشید.

محمد replyپاسخ

سلام من وقتی مثل شما میخوام اطلاعات رو وارد جدول کنم به فیلد name ایراد میگیره اگر name رو نذارم به email ایراد می گیره و این ارور رو میده MassAssignmentException in Model.php line 444

محمد replyپاسخ

از کلاس DB::insert استفاده میکنم با موفقیت اطلاعات در جدول درج میشه ولی به شکلی که شما داخل فیلم گفتید یعنی User::create ارور میده! ممنون میشم راهنمایی بفرمایید

کیوان علی محمدی

در داخل کلاس User بخش fillable رو چک کنید و مطمئن بشید همه فیلد هایی که دارین اضافه می کنید در $fillable موجود باشه.

محمد replyپاسخ

انجام دادم باز نشد, این ارور رو شما متوجه میشید ؟
کد UsersController و کلاس User و اروری که میگیرم رو گذاشتم ممنون میشم راهنمایی بفرمایید

//UsersController
public function store()
    {

        $users=[

          ‘name’=>request()->input(‘name’),
          ’email’=>request()->input(’email’),
          ‘password’=>request()->input(‘password’)


        ];

       User::create($users);

         }

//User class

?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Model
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */


   protected $fillable=[‘name’,’email’,’password’];




    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        ‘password’, ‘remember_token’,
    ];
}



//get Errors



    in Model.php line 444
    at Model->fill(array(‘name’ => ‘salam’, ’email’ => ‘zahra@gmail.com’, ‘password’ => ‘1234’)) in Model.php line 280
    at Model->__construct(array(‘name’ => ‘salam’, ’email’ => ‘zahra@gmail.com’, ‘password’ => ‘1234’)) in Model.php line 559
    at Model::create(array(‘name’ => ‘salam’, ’email’ => ‘zahra@gmail.com’, ‘password’ => ‘1234’)) in UsersController.php line 44
    at UsersController->store()
    at call_user_func_array(array(object(UsersController), ‘store’), array()) in Controller.php line 55
    at Controller->callAction(‘store’, array()) in ControllerDispatcher.php line 44
    at ControllerDispatcher->dispatch(object(Route), object(UsersController), ‘store’) in Route.php line 190
    at Route->runController() in Route.php line 144
    at Route->run(object(Request)) in Router.php line 653
    at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 53
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41
    at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65
    at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
    at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
    at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
    at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
    at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
    at Pipeline->then(object(Closure)) in Router.php line 655
    at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 629
    at Router->dispatchToRoute(object(Request)) in Router.php line 607
    at Router->dispatch(object(Request)) in Kernel.php line 268
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
    at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
    at Pipeline->then(object(Closure)) in Kernel.php line 150
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
    at Kernel->handle(object(Request)) in index.php line 54

محمد replyپاسخ

استاد علی محمدی من میخوام دوره متخصص شمارو شرکت کنم حتما، اگر مقدور هست براتون این مشکل رو کمک کنید من حل کنم جلسه ۹ موندم دیگه پیشرفت نمیکنم خیلی ممنونتون میشم بزرگوارید ?

محمد replyپاسخ

استاد متوجه شدم مشکل از namespace ها بود خیلی ممنونم ?

Reza Jashnsaz replyپاسخ

سلام خسته نباشید آقای محمدی .. میگم اگه بخوام هم فیلد role هم فیلد wallet رو guarded$ بذارم باید چجوری اینکارو انجام بدم ؟

محمدامین عطائی replyپاسخ

MassAssignmentException in Model.php line 444:
name

سلام اینو چجوری رفع کنم ؟

محمدامین عطائی

این مشکلم برطرف شد ولی باز به این مشکل خوردم :

FatalThrowableError in User.php line 7:
Class ‘App\Authenticatable’ not found

<?php

namespace App;

use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    // protected $table = ‘users’;

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $guarded = [‘role’];
    protected $hidden = [
        ‘password’, ‘remember_token’,
    ];
}
کیوان علی محمدی

شما این کلاس رو باید داشته باشید Authenticatable . سرچ کنید و این کلاس رو use کنید.

کیوان علی محمدی

سلام آموزش ها رو ببینید لطفا و عجله نکنید.

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.