رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
entity و table در کیک +3
#1
با سلام
در ادامه تاپیک http://forum.cakephp.ir/thread-1594-post-8841.html و تفاوت های کیک 2 و 3 این مطلب را مینویسیم

در این مطلب میخواهیم تنها در مورد table , entity صحبت کنیم

مطلب را با مثال ادامه میدهیم

- فرض کنید در دیتابیس جدولی داریم به نام articles


- رویداد ها , متد ها , ولیدیشن ها و تمام مواردی که قبلا در

کد پی‌اچ‌پی:
/app/Model/Article.php 
تعریف می شد این بار در Table ذخیره میشود که آدرس آن را در زیر میبینید

کد پی‌اچ‌پی:
src/Model/Table/ArticlesTable.php 


بنابراین میتوان model نسخه 2 را تقریبا با Table نسخه 3 یکی دانست

ٍ
  Heart Entity

اما مطلب مهمی که میخواهیم در مورد آن صحبت کنیم entity میباشد

شاید قبلا که که با کیک 2 کد میزدید مجبور بودید اطلاعات را به صورت آرایه به تابع save ارسال کنید تا ذخیره شود

این مورد در مورد ویرایش / حذف / و خواندن هم صادق بود

اما entity به چه معناست ؟ Dodgy

فرض کنید میخواهیم در مورد چیزی اطلاعات کسب کنیم
میخواهیم فقط در مورد یک شی یا یک مورد خاص صحبت کنیم
در این مثال article
میخواهیم مقاله ای داشته باشیم که شامل id , title, content , created, باشد

تمام این موارد را میخواهیم در یک مجموعه داشته باشیم که به راحتی به آن دسترسی داشته باشیم
به عنوان مثال وقتی خواستیم title یا id    آن دسترسی داشته باشیم بتوانیم  به این شکل عمل کنیم
کد پی‌اچ‌پی:
$article1->id

$article1
->content
$article1
->title 


به راحتی میتواتیم به دیگر عناصر آن  دسترسی داشته باشیم

حال اگر چند مقاله داشته باشیم کافیست object آن ها دسترسی داشته باشیم
کد پی‌اچ‌پی:
$article1

$article2
$article3 

همان طور که میبینید بر خلاف کیک 2 دیگر با آرایه به عناصر دسترسی پیدا نمیکنیم
همه چیز در شیئ موجوده

- شاید حدث زده باشید Tongue
فیلد های دیتابیس ,  عناصر entity ما می باشد
 $article1 و 2 ... entity های ما می باشد

- بنابراین با یک تعریف نه چندان دقیق میتوان گفت هر رکورد در دیتابیس معادل یک entity میباشد

- اگر سه رکود داشته باشیم در واقع 3 entity داریم

entity ها در پوشه
کد پی‌اچ‌پی:
src/Model/Entity
قرار داده میشوند


- خوب آیا تفاوت entity و آرایه در نسخه 2 فقط object بودن آن است ؟
 جواب ) خیر


بگذارید چند مثال را با هم مرور کنیم

در ادامه ممکن است به جای اسم $article1 از $entity استفاده کنیم


- فرض کنید میخواهید بدانید آیا entity که داریم آیا قبلا در دیتابیس ذخیره شده است یا نه ؟
یعنی آیا این entity تازه ساخته شده و مثلا از فرم های داخل سایت آمده یا این که ما آن را از دیتابیس فراخوانی کرده ایم؟

کد پی‌اچ‌پی:
$artlce1->isNew()

//or
$entity->isNew() 

اگر این مقدار مقدار true برگرداند نشان میدهد این entity در دیتابیس وجود ندارد

- خوب؟ به چه دردی میخورد ؟ Rolleyes

- جواب با شما


- یا مثلا میخواهیم رکوردی از دیتابیس را آپدیت کنیم
در این مثال میخواهیم فقط title مقاله را ویرایش کنیم

- در کیک 2 چطور فقط یک فیلد را آپدیت میکردید؟
تمام اطلاعات را به کاربر نشان میدادید و احتمالا کاربر میخواست تنها title را آپدیت کنید

-آیا راهی وجود داشت تشخیص دهیم کاربر تنها title را تغییر داده ؟ یا ما تمام عناصر را ویرایش میکردیم چه تغییر کرده بوده باشه چه نه؟
جواب با شما

اما در کیک 3 میتوانیم تشخصی دهیم Wink

میتوانیم تشخیص دهیم کدام عنصر تغییر کرده و فقط آن را ویرایش کنیم

کد پی‌اچ‌پی:
$entity->getDirty() 

لیست تمام فیلد هایی که تغییر کرده به شما نشان میدهد
در واقع به خود کیک نمایش میدهد و کیک به صورت هوشمند فقط این فیلد ها را آپدیت میکند

- شاید متوجه شده باشید save() دیگر آرایه قبول نمیکند
این تابع و توابع دیگر در ORM به جای آرایه از شما entity طلب میکنند


- میخواهید بدانید کاربر کدام فیلد را اشتباهی وارد کرده؟
مثلا ایمیل نا درست وارد کرده؟
بعد از تعریف validation ها در table  میخواهید بدانید کاربر کدام فیلد ها را نادرست وارد کرده
کد پی‌اچ‌پی:
$entity->getErrors(); 

میخواهید بدانید که فیلد ایمیل درست وارد شده یا نه؟
کد پی‌اچ‌پی:
$entity->getError('email'); 

اگر در view فیلد ها را با input تعریف کنید ( که جدیدا به نام control ) تغییر کرده
ارور هایی که در validation ها تعریف کردید به صورت اتومات به کاربر( در همان input ها )  نشان میدهد


- حال entity را فرستادیم به تابع save برای ذخیره یا ویرایش

کیک قبلا از هر کاری نگاه میکند که خطایی در entity وجود دارد یا خیر
اگر بود که اصلا اقدامی صورت نمیگیرد و این تابع false بر میگرداند

- مگر بررسی وجود خطا در زمان ذخیره (save) صورت نمیگیرد؟

در نسخه 3 این مورد موقع تبدیل آرایه به entity صورت میگیرد

کد پی‌اچ‌پی:
$entity $this->Articles->newEntity()

//
$entity $this->Articles->patchEntity($entity$this->request->getData()); 
   



در مثال بالا این مورد در patchEntity اتفاق می افتد
در این مثال newEntity یک entity خالی بر میگرداند


- نحوه ساخت یک entity به چه شکل می باشد؟

مکان ذخیره سازی و کلاس  entity  به این شکل می باشد

کد پی‌اچ‌پی:
// src/Model/Entity/Article.php

namespace App\Model\Entity;

use 
Cake\ORM\Entity;

class 
Article extends Entity
{


حال میخواهیم یک نمونه از آن بسازیم که چند راه برای آن وجود دارد

- مستقیم
کد پی‌اچ‌پی:
use App\Model\Entity\Article;


$entity = new Article(); 


یا اگر خواستید مقدار دهی اولیه هم داشته باشد
کد پی‌اچ‌پی:
use App\Model\Entity\Article;


$article = new Article([
 
   'id' => 1,
 
   'title' => 'New Article',
 
   'created' => new DateTime('now')
]); 


- راه دیگر استفاده از newEntity می باشد که بالا مثالی برای آن زدیم
- راه دیگر موقع خواندن از دیتابیس هست
- اطلاعات بازگشت شده از دیتابیس به شکل entity می باشد Tongue

کد پی‌اچ‌پی:
$entity $this->Articles->get(10

در این مثال رکورد با کلید  اصلی شماره 10 به صورت entity برگشت داده میشه

- راه های دیگر هم برای فراخوانی از دیتابیس وجود داره

که ویژگی های خودشان را داره
get با توجه به کلید اصلی این کار را میکنه و اگر پیدا نکرد یک exception رخ میده

که بسیار پر کاربر  هم هست

- Idea  توجه

بالاتر گفتیم validation ها موقع تبدیل آرایه به entity اعمال میشه ( همان که که اگر اشتباهی در ورودی کاربر باشه خطایی در entity ذخیره میشه )
فقط در متد های newEntity , newEntities , patchEntity , patchEntities اعمال میشه
و اگر  خواستید از روش مستقیم استفاده کنید validation ها اعمال نمیشه

روش مستقیم بسیار کم در کیک ( کل پروژه با کیک نوشته شود )  استفاده میشه مگر در مواردی که به آن نیاز داشته باشیم


این موارد خلاصه ای از تعریف entity در cakephp بود

کارهای دیگر هم میتواند با entity انجام داد مثل فیلد های مجازی


داکومنت entity
https://book.cakephp.org/3.0/en/orm/entities.html
پاسخ
سپاس شده توسط gha3m


پیام‌های این موضوع
entity و table در کیک +3 - saeid - 2018/05/10, 01:18 AM
RE: entity و table در کیک +3 - saeid - 2018/05/10, 01:30 AM
RE: entity و table در کیک +3 - saeid - 2018/05/10, 11:26 AM

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان