У Laravel есть собственное соглашение об именах. Например, если ваша модель называется User.php
, то Laravel ожидает, что класс «Пользователь» будет внутри этого файла. Также ожидается users
таблица для User
модели. Однако вы можете переопределить это соглашение, определив свойство таблицы в вашей модели, например,
class User extends Eloquent implements UserInterface, RemindableInterface {
protected $table = 'user';
}
Из официальной документации Laravel:
Обратите внимание, что мы не сообщили Eloquent, какую таблицу использовать для нашей модели пользователя. Имя класса в нижнем регистре во множественном числе будет использоваться в качестве имени таблицы, если явно не указано другое имя. Таким образом, в этом случае Eloquent будет предполагать, что модель User хранит записи в таблице users. Вы можете указать пользовательскую таблицу, определив свойство
$table
в вашей модели
Если вы будете использовать идентификатор пользовательской таблицы в другой таблице в качестве внешнего ключа, то это должен быть случай со змеей, подобный user_id
, так что он может быть использован автоматически в случае отношения. Опять же, вы можете переопределить это соглашение, указав дополнительные аргументы в функции отношений. Например,
class User extends Eloquent implements UserInterface, RemindableInterface {
public function post(){
return $this->hasMany('Post', 'userId', 'id');
}
}
class Post extends Eloquent{
public function user(){
return $this->belongsTo('User', 'userId', 'id');
}
}
Документы для красноречивых отношений Laravel
Для других столбцов в таблице вы можете называть их как хотите.
Я предлагаю вам один раз просмотреть документацию.
Нет, вы не можете этого сделать, единственное место, где вы можете вызвать конструктор из другого конструктора в C #, - это сразу после ":" после конструктора. например
class foo
{
public foo(){}
public foo(string s ) { }
public foo (string s1, string s2) : this(s1) {....}
}
Если вы имеете в виду, можете ли вы выполнять цепочку ctor на C #, ответ - да. Вопрос уже задан.
Однако, судя по комментариям, вы действительно собираетесь спросить
«Могу ли я вызвать перегруженный конструктор из внутри другого конструктора с предварительной / постобработкой?»
Хотя в C # нет синтаксиса для этого, вы можете сделать это с помощью общей функции инициализации (как в C ++, который не поддерживает цепочку ctor)
class A
{
//ctor chaining
public A() : this(0)
{
Console.WriteLine("default ctor");
}
public A(int i)
{
Init(i);
}
// what you want
public A(string s)
{
Console.WriteLine("string ctor overload" );
Console.WriteLine("pre-processing" );
Init(Int32.Parse(s));
Console.WriteLine("post-processing" );
}
private void Init(int i)
{
Console.WriteLine("int ctor {0}", i);
}
}
РЕДАКТИРОВАТЬ: Согласно комментариям к исходному сообщению, это вопрос C #.
Краткий ответ: да, с использованием ключевого слова this
.
Длинный ответ : да, используя ключевое слово this
, и вот пример.
class MyClass
{
private object someData;
public MyClass(object data)
{
this.someData = data;
}
public MyClass() : this(new object())
{
// Calls the previous constructor with a new object,
// setting someData to that object
}
}
В C # невозможно вызвать другой конструктор из тела метода. Вы можете вызвать базовый конструктор следующим образом: foo (args): base (), как указали сами. Вы также можете вызвать другой конструктор в том же классе: foo (args): this ().
Когда вы хотите что-то сделать перед вызовом базового конструктора, кажется, что построение базового класса зависит от некоторых внешних факторов . Если это так, вы должны использовать аргументы базового конструктора, а не устанавливать свойства базового класса или что-то в этом роде