PDA

View Full Version : استفاده از پریفیکس N در active record



sara.ghavam
یک شنبه 12 دی 1395, 06:42 صبح
سلام دوستان گلم
من میخوام که از پریفیکس N توی کوئری هام استفاده کنم هم توی Insert و هم Select و هم Update اما میخوام این به صورت Active record باشه نه به صورت query ساده

مثلا به جای

SELECT * FROM table WHERE name = N'علی'

numberone1
یک شنبه 12 دی 1395, 13:22 عصر
سلام

تا اونجایی که من میدونم همچین قابلیتی بصورت پیش فرض وجود نداره ولی میتونی یه فایل کانفیگ تعریف کنی prefix هارو توش ست کنی موقع کوئری نوشتن ازش استفاده کنی


$this->db->where($this->config_vars('fied_prefix').'field','ali');

sara.ghavam
دوشنبه 13 دی 1395, 17:28 عصر
سلام

تا اونجایی که من میدونم همچین قابلیتی بصورت پیش فرض وجود نداره ولی میتونی یه فایل کانفیگ تعریف کنی prefix هارو توش ست کنی موقع کوئری نوشتن ازش استفاده کنی


$this->db->where($this->config_vars('fied_prefix').'field','ali');


ممنونم عزیزم میشه یکم بیشتر توضیح بدی؟ این فایل رو کجا باید ایجاد کنم و محتواش چی باید باشه؟

numberone1
دوشنبه 13 دی 1395, 22:23 عصر
ممنونم عزیزم میشه یکم بیشتر توضیح بدی؟ این فایل رو کجا باید ایجاد کنم و محتواش چی باید باشه؟

توی فولدر cnfig یه فایل درست میکنی اسمش هرچی میتونه باشه
محتواش این شکلی


$config['field_prefix'] = 'my_fiel_prefix';

از این خط هرچقدر لازم داری میتونی کپی کنی و اسمشو عوض کنی مقدار جدید بهش بدی
نحوه استفاده هم
اول باید فایل کانفیگ و لود کنی (میتونی توی autoload هم بزاریش)

$this->config->load('filename');
نحوه فراخوانی ایتم ها هم به این شکل

$this->config->item('item_name');
با کلاس کانفیگ کار های بیشتری هم میشه کرد که میتونی از توی فایل راهنماش بخونی
https://www.codeigniter.com/userguide3/libraries/config.html

sara.ghavam
دوشنبه 13 دی 1395, 22:27 عصر
ممنون اما در نهایت مثلا توی یک Insert به صورت Active record چطوری باید از این استفاده کنم؟ میشه این قسمتشم توضیح بدین؟

numberone1
سه شنبه 14 دی 1395, 02:17 صبح
ممنون اما در نهایت مثلا توی یک Insert به صورت Active record چطوری باید از این استفاده کنم؟ میشه این قسمتشم توضیح بدین؟

اگر برای هر فیلد یک prefix اختصاصی تعریف کرده باشی این شکلی

$data = array(
$this->config->item('title').'title' => 'My title',
$this->config->item('name').'name' => 'My Name',
$this->config->item('date').'date' => 'My date'
);

$this->db->insert('mytable', $data);

اگر برای همه فیلد ها کلا یک prefix تعریف کردی بهتره قبل از استفاده تو کوئری انتصاب بدی به یه متغیر تا هر بار به آبجکت و متد ارجاع نده. اینجوری سرعت بالاتر میره


$prefix = $this->config->item('item_name') ;

sara.ghavam
سه شنبه 14 دی 1395, 06:06 صبح
سلام دوست عزیزم
فکر کنم منظورم رو اشتباه متوجه شدی، منظورم پریفیکس برای نام فیلد ها نبود منظورم پریفیکس N برای کوئری زدن برای مطالب فارسی بود
به صورت زیر


SELECT * FROM table WHERE name = N'علی'

numberone1
سه شنبه 14 دی 1395, 15:12 عصر
سلام دوست عزیزم
فکر کنم منظورم رو اشتباه متوجه شدی، منظورم پریفیکس برای نام فیلد ها نبود منظورم پریفیکس N برای کوئری زدن برای مطالب فارسی بود
به صورت زیر


SELECT * FROM table WHERE name = N'علی'


نمییدونم!!! چیزی راجع به پریفیکس value فارسی کوئری نشنیدم تاحالا!!
value که نیاز به پرییفیکس نداره!! باز اگر میتونی بیشتر توضیح بده که کاربردش چیه و برای چی میخوای استفاده کنی

sara.ghavam
سه شنبه 14 دی 1395, 16:18 عصر
این موضوع در SQL Server استفاده میشه برای محتوای UTF8
چون در فارسی و عربی ک و ی و اعداد کاراکترهاشون با هم فرق می کنند و هنگام کوئری زدن دچار مشکل میشیم، در ضمن من نمیتونم دیتاهای SQL Server رو هم تغییر بدم
الان به صورت this->db->query مشکلم رو حل کردم یعنی استفاده از کوئری که براتون نوشتم
اما من میخوام بتونم به صورت active record ان کار رو انجام بدم

numberone1
سه شنبه 14 دی 1395, 21:00 عصر
این موضوع در SQL Server استفاده میشه برای محتوای UTF8
چون در فارسی و عربی ک و ی و اعداد کاراکترهاشون با هم فرق می کنند و هنگام کوئری زدن دچار مشکل میشیم، در ضمن من نمیتونم دیتاهای SQL Server رو هم تغییر بدم
الان به صورت this->db->query مشکلم رو حل کردم یعنی استفاده از کوئری که براتون نوشتم
اما من میخوام بتونم به صورت active record ان کار رو انجام بدم

الان متوجه منظورتون شدم
این مشکل بخاطر استفاده از نسخه قدیمی sql هست. شما الان یا از 2000 یا 2005 استفاده میکنی. اگر از نسخه 2016 استفاده کنی این مشکل حل شده و دیگه نیازی به پریفیکس نیست
توی کوئری insert و update میتونی از set استفاده کنی. پارامتر سوم و false بزار که از فیلتر نگذره


$this->db->set('field', 'N'.'\'ugd\'', FALSE);

توی کوئری select هم که شرط و بصورت string بنویس