Laravel hasOne()函数在不在对象上下文中使用$this



我有两个模型命名为AdminContent, AdminCategory。我有content_category_id在我的admin_contents表。我的admin_categories表中有category_id和category_name。我用content_category_id foreign链接了category_id。我在Admin Content模型中使用hasOne()函数。但我得到错误使用$this时不在对象上下文中!我的主要目标是从admin_categories表名列

中获取content_category_id值<<p>迁移/strong>
// Admin Categories Migration
Schema::create( 'admin_categories', function(Blueprint $table) {
$table->bigIncrements('ctgry_id')->unique();
$table->string('category_name', 50)->unique();
$table->timestamps();
});
// Admin Contents Migration
Schema::create('admin_contents', function (Blueprint $table) {
$table->bigIncrements('cntnt_id')->unique();
$table->string('content_title');
$table->text('content_content');
$table->string('content_slug');
$table->bigInteger('content_category_id');
$table->foreign('content_category_id')->references('ctgry_id')->on('admin_categories');

$table->string('content_status');
$table->string('create_user');
$table->string('content_tags');
$table->string('content_excerpt');
$table->dateTime('posted_at');
$table->timestamps();
});

// AdminContent Model
protected $table = "admin_contents";
protected $fillable = [
'content_title', 'content_content',
'content_category_id', 'content_status', 'create_user','content_tags',
'content_excerpt',
'created_at', 'updated_at'
];
protected $guards = [
'cntnt_id',
];
public function setCategoryName()
{
return $this->hasOne(AdminCategory::class);
}

当我想访问$this->hasOne(AdminCategory::class)我得到这个错误!

首先:Laravel中的关系是基于标准化模型的,使用'id'作为id的列名。如果您正在为firstKey使用另一个名称,则应该将其添加到关系定义中,如文档中所述。我的意思是,你们的关系不应该继续下去,因为Eloquent不知道哪个是你的表的第一个键。

第二:当你定义一个关系时,你应该从你的模型中调用id。你是怎么进入$this->hasOne(AdminCategory::class)的?应该是AdminContent::with('setCategoryName')

也许从你的控制器显示一些代码,我们可以给你一个更准确的答复。

我想要的是,我得到的博客内容与查询和打印它。但我打印content_category_id值作为类别表中的id值。我需要做的是获取类别表中的content_category_id和id值,以及链接到id的类别名。提前感谢您的帮助。

Admin Content Model

namespace AppModelsAdmin;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesDB;
class AdminContent extends Model
{
use HasFactory;
protected $table = "admin_contents";
protected $primaryKey = 'cntnt_id';
protected $fillable = [
'content_title', 'content_content',
'content_category_id', 'content_status', 'create_user','content_tags',
'content_excerpt',
'created_at', 'updated_at'
];
protected $guards = [
'cntnt_id',
];
public function _all()
{
return self::all();
}
public static function setCategoryName()
{
return $this->hasOne(AdminCategory::class, 'content_category_id', 'ctgry_id');
}
}

Admin Category Model

namespace AppModelsAdmin;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class AdminCategory extends Model
{
use HasFactory;
protected $table = 'admin_categories';
protected $primaryKey = 'ctgry_id';
protected $fillable = [
'category_name', 'updated_at'
];
protected $quards = [
'ctgry_id', 'created_at'
];
}
<<p>Post控制器/strong>
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsAdminAdminContent;
class PostController extends Controller
{
public function index()
{
return view('frontend.blog');
}
public function getCategoryName()
{
return AdminContent::find(1)->setCategoryName;
}
}
<<p>

MySQL表/strong>https://www.hizliresim.com/2z0337a