راکت

ست کردن فیلد text به عنوان primary

12 پاسخ

سلام
برای جدولی که در حال حاضر موجود هستش یه migration ساختم و خواستم 2تا از فیلد ها رو primary بکنم به روش زیر
$table->primary(['title' , 'link_id']);
چون فیلد title از نوع text هستش خطایی میده که باید براش key length تعریف بشه.
سوالم اینه که این کار توی همین دستور قابل انجامه یا کار دیگه باید بکنم؟

pooria83
pooria83
@pjalili83
ثبت پرسش جدید

پاسخ‌ها

12
Saman
Saman
@samanzdev

تخصص: برنامه نویس وب

سلام
اگه فیلد title از نوع text هستش نیاز به تعریف length نداره ، می تونید به همین روش که رفتید پیش برید.
@pjalili83

pooria83
pooria83
@pjalili83

@samanzdev
متاسفانه با خطای زیر مواجه میشه
Syntax error or access violation: 1170 BLOB/TEXT column 'title' used in key specification without a key length (SQL: alter table news add primary key news_title_link_id_primary(title, link_id))

شاید پاسخ شما همین‌جا باشد

Saman
Saman
@samanzdev

تخصص: برنامه نویس وب

یک عکس از کد هاتون بدید.
شما می خوایید فیلد title مثل فیلد id خود به خود پر بشه؟
@pjalili83

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

قصدت از این کار چیه؟

pooria83
pooria83
@pjalili83

@samanzdev
@ali.bayat
نه
من میخوام از ورود duplicate جلوگیری کنم.
اگر یه رکورد با یه title و linkid وارد شد دیگه رکورد مشابهی با این دو فیلد وارد نشه

Saman
Saman
@samanzdev

تخصص: برنامه نویس وب

خب می تونید این دو تا فیلد رو unique کنید
@pjalili83

pooria83
pooria83
@pjalili83

@samanzdev
آخه ممکنه title مشابه باشه ولی link_id متفاوت.این از نظر منطق اون اپ مشکلی نیست.
اگر هر دو تکراری باشن مغایر با منطقه

Saman
Saman
@samanzdev

تخصص: برنامه نویس وب

متوجه منظورتون نشدم.
لطفا اگه میشه یه عکسی از کد هاتون بفرستید، به این شکل راحتتر میشه مشکلتون رو حل کرد.
@pjalili83

pooria83
pooria83
@pjalili83

@samanzdev
کدوم بخش از کد ها مد نظرتون هست که ارسال کنم؟
فرض کنید یه رکورد داریم که link_id = 2 هستش و title=apple
حالا اگر یه رکورد جدید بخواد ذخیره بشه که link_id = 1 هستش و title=apple ایرادی نداره و میتونه ذخیره بشه.اما اگر link_id = 2 هستش و title=apple این رکورد تکراریه و نباید ذخیره بشه.

Saman
Saman
@samanzdev

تخصص: برنامه نویس وب

اوکی
خب شما می تونید فیلد link_id رو unique کنید.
@pjalili83

pooria83
pooria83
@pjalili83

@samanzdev
بینیدفرض کنید یه رکورد داریم که link_id = ۲ هستش و title=apple
حالا اگر یه رکورد جدید بخواد ذخیره بشه که link_id = ۱ هستش و title=apple ایرادی نداره و میتونه ذخیره بشه.
همچنین اگر link_id=2 هستش و title=orange مشکلی نداره.
اما اگر link_id = ۲ هستش و title=apple این رکورد تکراریه و نباید ذخیره بشه.
اگر هر دو فیلد باهم تکراری باشن مغایر با اون منطقه.

pooria83
pooria83
@pjalili83

شما ایده ای دارید برای حل این مشکل؟
@hesammousavi

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام