我正在尝试从users表的articles表中获取(然后显示)带有外键的创建者/作者名称。我只是喜欢laravel我希望你可以帮我解决这个问题。我没有int类型F-key(s)的问题但是对于字符串类型我可能在某处丢失了某些东西。有时它会给我一些错误,有时候一切正常但文章表上的user_name只是保持为空。 如果您需要更多关于某事的信息,请发表评论。 提前谢谢!
文章的架构
Schema::create('articles', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('user_name')->nullable();
$table->string('title');
$table->text('body');
$table->timestamps();
$table->timestamp('published_at');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('user_name')
->references('name')
->on('users')
->onDelete('cascade');
});
用户的架构
Schema::create('users', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name')->unique();
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
答案 0 :(得分:0)
请勿在文章中保存用户名。 您只保存用户ID并在模型中创建关系,如
class User extends Model {
public function articles() {
return $this->hasMany('App\Article');
}
}
class Article extends Model {
public function user() {
return $this->belongsTo('App\User');
}
}
如果你的关系设置正确,你可以访问这样的用户名:
$article->user->name
在另一个方向,您可以使用以下用户文章:
$user->articles
注意:关系的处理方式与属性类似,而不像函数一样。
答案 1 :(得分:0)
我的建议是......
应用/ user.php的
namespace App;
use Illuminate\Database\Eloquent\Model;
use ...
class User extends ...{
public function Articles(){
return $this->hasMany(Articles::class)
}
}
应用/ Article.php 使用Illuminate \ Database \ Eloquent \ Model;
namespace App;
class Article extends Model{
public function User(){
return $this->belongsTo(User::class);
}
public function getAuthorAttribute(){
return $this->User->name;
}
}
现在您可以访问数据...
$user->Articles;
$article->User
$article->author
要优化访问权限,您可以通过将任何关系作为函数调用来获取查询构建器。
$user->Articles()->where('title, 'like', 'cars')->get()
看看发生了什么......
$user->Articles()->where('title, 'like', 'cars')->toSql()